Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq使用max选择单个值_C#_.net_Linq - Fatal编程技术网

C# Linq使用max选择单个值

C# Linq使用max选择单个值,c#,.net,linq,C#,.net,Linq,如何获取属性ID 3?有没有一种方法可以将结果转换为Conta List<Conta> contas = new List<Conta>(); contas.Add(new Conta { ID = 1, Saldo = 30 }); contas.Add(new Conta { ID = 2, Saldo = 50 }); contas.Add(new Conta { ID = 3, Saldo = 100 }); var result = contas.Where

如何获取属性ID 3?有没有一种方法可以将结果转换为Conta

List<Conta> contas = new List<Conta>();

contas.Add(new Conta { ID = 1, Saldo = 30 });
contas.Add(new Conta { ID = 2, Saldo = 50 });
contas.Add(new Conta { ID = 3, Saldo = 100 });

var result = contas.Where(c => c.Saldo == contas.Max(l => l.Saldo)) ;
List contas=new List();
Add(新Conta{ID=1,Saldo=30});
Add(新Conta{ID=2,Saldo=50});
Add(新Conta{ID=3,Saldo=100});
var result=contas.Where(c=>c.Saldo==contas.Max(l=>l.Saldo));
如果只需要一个结果,请使用
Single()
First()

var result = contas.FirstOrDefault(c => c.Saldo == contas.Max(l => l.Saldo));
这将返回具有最大Saldo的
Conta
对象。

如果只需要一个结果,请使用
Single()
First()

var result = contas.FirstOrDefault(c => c.Saldo == contas.Max(l => l.Saldo));
var max = Users.OrderByDescending(x => x.Saldo).FirstOrDefault();

这将返回具有最大Saldo的
Conta
对象。

而不是使用
。其中()
使用
Single()

var max = Users.OrderByDescending(x => x.Saldo).FirstOrDefault();
如果结果中有0个或多个元素,
Single
将引发异常

如果结果中有多个元素,
SingleOrDefault
将引发异常

如果没有结果,
First
将抛出(列表为空)


如果列表为空,
FirstOrDefault
将抛出。

而不是使用
。其中()
使用
Single()
/
SingleOrDefault()
/
First()
/
FirstOrDefault()

如果结果中有0个或多个元素,
Single
将引发异常

如果结果中有多个元素,
SingleOrDefault
将引发异常

如果没有结果,
First
将抛出(列表为空)

如果列表为空,
FirstOrDefault
将抛出。

是否需要
MaxBy()
扩展方法

一旦有了这些,解决方案就变得简单:

List<Conta> contas = new List<Conta>();

contas.Add(new Conta { ID = 1, Saldo = 30 });
contas.Add(new Conta { ID = 2, Saldo = 50 });
contas.Add(new Conta { ID = 3, Saldo = 100 });

var result = contas.MaxBy(x => x.Saldo);

Console.WriteLine(result.ID);
List contas=new List();
Add(新Conta{ID=1,Saldo=30});
Add(新Conta{ID=2,Saldo=50});
Add(新Conta{ID=3,Saldo=100});
var result=contas.MaxBy(x=>x.Saldo);
Console.WriteLine(result.ID);
以下是MaxBy()的示例实现(这归功于Jon Skeet等人):

公共静态类EnumerableText
{
公共静态TSource MaxBy(此IEnumerable源,Func选择器)
{
返回source.MaxBy(选择器、比较器、默认值);
}
公共静态TSource MaxBy(此IEnumerable源、Func选择器、IComparer比较器)
{
使用(IEnumerator sourceIterator=source.GetEnumerator())
{
如果(!sourceIterator.MoveNext())
{
抛出新的InvalidOperationException(“序列为空”);
}
TSource max=sourceIterator.Current;
TKey maxKey=选择器(最大值);
while(sourceIterator.MoveNext())
{
TSource candidate=sourceIterator.Current;
TKey candidateProjected=选择器(候选者);
if(comparer.Compare(candidateProjected,maxKey)>0)
{
max=候选人;
maxKey=候选项目;
}
}
返回最大值;
}
}
}
您需要一个
MaxBy()
扩展方法

一旦有了这些,解决方案就变得简单:

List<Conta> contas = new List<Conta>();

contas.Add(new Conta { ID = 1, Saldo = 30 });
contas.Add(new Conta { ID = 2, Saldo = 50 });
contas.Add(new Conta { ID = 3, Saldo = 100 });

var result = contas.MaxBy(x => x.Saldo);

Console.WriteLine(result.ID);
List contas=new List();
Add(新Conta{ID=1,Saldo=30});
Add(新Conta{ID=2,Saldo=50});
Add(新Conta{ID=3,Saldo=100});
var result=contas.MaxBy(x=>x.Saldo);
Console.WriteLine(result.ID);
以下是MaxBy()的示例实现(这归功于Jon Skeet等人):

公共静态类EnumerableText
{
公共静态TSource MaxBy(此IEnumerable源,Func选择器)
{
返回source.MaxBy(选择器、比较器、默认值);
}
公共静态TSource MaxBy(此IEnumerable源、Func选择器、IComparer比较器)
{
使用(IEnumerator sourceIterator=source.GetEnumerator())
{
如果(!sourceIterator.MoveNext())
{
抛出新的InvalidOperationException(“序列为空”);
}
TSource max=sourceIterator.Current;
TKey maxKey=选择器(最大值);
while(sourceIterator.MoveNext())
{
TSource candidate=sourceIterator.Current;
TKey candidateProjected=选择器(候选者);
if(comparer.Compare(candidateProjected,maxKey)>0)
{
max=候选人;
maxKey=候选项目;
}
}
返回最大值;
}
}
}
可能的重复将是O(N^2)。。。至少获取
Where()
可能重复的值以外的最大值,该值将是O(N^2)。。。至少获取
Where()之外的最大值。