相关疑难解决方法(0)

如何使用LINQ选择具有最小或最大属性值的对象

我有一个具有Nullable DateOfBirth属性的Person对象.有没有办法使用LINQ查询具有最早/最小DateOfBirth值的Person对象列表.

这是我开始的:

var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue));
Run Code Online (Sandbox Code Playgroud)

Null DateOfBirth值设置为DateTime.MaxValue,以便将它们排除在Min考虑范围之外(假设至少有一个具有指定的DOB).

但对我来说,所有这一切都是将firstBornDate设置为DateTime值.我想得到的是与之匹配的Person对象.我是否需要编写第二个查询:

var firstBorn = People.Single(p=> (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate);
Run Code Online (Sandbox Code Playgroud)

或者有更简洁的方法吗?

.net c# linq

437
推荐指数
8
解决办法
24万
查看次数

如何让LINQ返回具有给定属性的最大值的对象?

如果我有一个类似于以下的类:

public class Item
{
    public int ClientID { get; set; }
    public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这些物品的集合......

List<Item> items = getItems();
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ返回具有最高ID的单个"Item"对象?

如果我这样做:

items.Select(i => i.ID).Max(); 
Run Code Online (Sandbox Code Playgroud)

我只会得到最高的ID,当我真正想要返回的是具有最高ID的Item对象本身?我希望它返回一个"Item"对象,而不是int.

c# linq linq-to-objects

130
推荐指数
7
解决办法
10万
查看次数

LINQ使用Max()选择单行

我在从NHibernate返回的IQueryable上使用LINQ,我需要在几个字段中选择具有最大值的行.

我简化了我坚持的一点点.我需要从表中选择一行,并在一个字段中使用最大值.

var table = new Table { new Row(id: 1, status: 10), new Row(id: 2, status: 20) }

from u in table
group u by 1 into g
where u.Status == g.Max(u => u.Status)
select u
Run Code Online (Sandbox Code Playgroud)

这是不正确的,但我无法找到正确的表格.

顺便说一下,我实际上想要实现的是这样的:

var clientAddress = this.repository.GetAll()
    .GroupBy(a => a)
    .SelectMany(
            g =>
            g.Where(
                a =>
                a.Reference == clientReference && 
                a.Status == ClientStatus.Live && 
                a.AddressReference == g.Max(x => x.AddressReference) && 
                a.StartDate == g.Max(x => x.StartDate)))
    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

我从上面的lambda开始,但我一直在使用LINQPad来尝试找出选择Max()的语法.

UPDATE

删除GroupBy是关键.

var all = this.repository.GetAll();

var …
Run Code Online (Sandbox Code Playgroud)

.net c# linq

90
推荐指数
4
解决办法
26万
查看次数

OrderBy().Last()或OrderByDescending().First()性能

我知道这可能是微优化,但我仍然不知道使用中是否有任何差异

var lastObject = myList.OrderBy(item => item.Created).Last();
Run Code Online (Sandbox Code Playgroud)

要么

var lastObject = myList.OrderByDescending(item => item.Created).First();
Run Code Online (Sandbox Code Playgroud)

我正在寻找Linq对象和Linq to Entities的答案.

.net c# linq

37
推荐指数
2
解决办法
2万
查看次数

如何在数组C#中找到模式?

我想在数组中找到模式.我知道我必须做嵌套循环来检查每个值,看看数组中的元素出现的频率.然后我必须计算第二个元素出现的次数.下面的代码不起作用,任何人都可以帮助我.

for (int i = 0; i < x.length; i ++)
{
    x[i]++;
    int high = 0;
    for (int i = 0; i < x.length; i++)
    {
        if (x[i] > high)
        high = x[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

23
推荐指数
3
解决办法
2万
查看次数

使用C#查找字符串中出现次数最多的字符?

例如,我有一个字符串:

"abbbbccd"
Run Code Online (Sandbox Code Playgroud)

b发生次数最多.使用C++时,处理此问题的最简单方法是将每个字符插入到map<>.我是否必须在C#中做同样的事情?使用LINQ有一种优雅的方式吗?

c# linq

18
推荐指数
3
解决办法
2万
查看次数

LINQ- Max在哪里条件

我有一个带有这个定义的类TaskWeekUI:

 public class TaskWeekUI    {
   public Guid TaskWeekId { get; set; }
   public Guid TaskId { get; set; }
   public Guid WeekId { get; set; }
   public DateTime EndDate { get; set; }
   public string PersianEndDate { get; set; }
   public double PlanProgress { get; set; }
   public double ActualProgress { get; set; }    } 
Run Code Online (Sandbox Code Playgroud)

我写了这个查询:

 TaskWeekUI ti =  tis.First( t => t.PlanProgress > 0 && t.EndDate ==  tis.Where(p => p.PlanProgress != null && p.PlanProgress > 0).Max(w => w.EndDate));
Run Code Online (Sandbox Code Playgroud)

这个查询是真的吗?我能比这更好地写出我的查询吗?

c# linq max where

11
推荐指数
2
解决办法
4万
查看次数

找到具有最大值属性的元素的速度更快

通常,要找到具有最大值属性的元素,我喜欢这样

var itemWithMaxPropValue = collection.OrderByDescending(x => x.Property).First();
Run Code Online (Sandbox Code Playgroud)

但从性能的角度来看,这是好方法吗?也许我应该做这样的事情?

var maxValOfProperty = collection.Max(x => x.Property);
var itemWithMaxPropValue = collection
                                 .Where(x => x.Property == maxValueOfProperty).First();
Run Code Online (Sandbox Code Playgroud)

c# linq collections performance

7
推荐指数
2
解决办法
1477
查看次数

从List <t>获取具有特定属性的最大值的记录

可能重复:
LINQ:如何对集合中所有对象的属性执行.Max()并返回具有最大值的对象

我有以下课程:

class Product
{
    public string ProductName { get; set; }
    public DateTime ActivationDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建并填写一个 List<Product>,我想ProductNameProduct最新的ActivationDate.

Product.Where(m => m.ActivationDate == Max(m.ActivationDate)).Select(n => n.ProductName)

Product.Max(m => m.ActivationDate).Select(n => n.ProductName)
Run Code Online (Sandbox Code Playgroud)

但机器人方法不起作用.有人知道实现这项任务的方法吗?

c# linq max

3
推荐指数
1
解决办法
1万
查看次数

C# 使用 LINQ 过滤对象列表中具有最大值的每个对象

我不只是想在列表中找到最大值。我正在尝试为给定的字符串标题找到具有最大值的每个对象。最终结果将是一个列表对象,其中只有具有最大值的对象。

我似乎无法让我的 LINQ 语句起作用。它不断拉取最大整数值,而不是拉取具有最大整数值的对象。

另外,如果有更有效的路线而不是循环遍历列表 - 我完全赞成。

任何帮助是极大的赞赏

编辑这不是Servy建议此链接的重复
如果@Servy 专注于阅读文本而不是比较标题,他/她会发现这是完全不同的,那么这不是 Servy。该链接想要找到对象的单个最大值。这不是我要问的。

这是我当前的代码:

public class Prop {     
    public string title {get;set;}
    public int val {get;set;}       
}   

public static void Main()
{
    List<Prop> list = new List<Prop>();
    list.Add(newProp("voltage", 7));
    list.Add(newProp("voltage", 24));
    list.Add(newProp("systemconfiguration", 2451));
    list.Add(newProp("systemunit", 0));
    list.Add(newProp("systemunit", 15));
    list.Add(newProp("voltage", 0));


    List<Prop> newList = new List<Prop>();

    foreach (var p in list) {
        var newP = list.Select(r => r).Where(t => t.title == p.title).Max(v => v.val);  
        Console.WriteLine(newP.ToString());  
        //This is returning …
Run Code Online (Sandbox Code Playgroud)

c# linq list max

2
推荐指数
1
解决办法
3369
查看次数

标签 统计

c# ×10

linq ×9

.net ×3

max ×3

collections ×1

linq-to-objects ×1

list ×1

performance ×1

where ×1