开发者

How to select a single object using Linq in vb.net

I have done a lot of searching to what appears to be a simple LINQ problem but I can't figure out how to do grab an object out of a collection that has a specified minimum (or max value) without resorting to a sort like this:

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Order By c.age Ascending).ToList.First

This (untested code) structure works fine with the exception that the entire customer array must be sorted and placed into a list for the only purpose of extracting the first value. That can't be the best way to get the minimum!

Note that I want the whole c record in this case, not the minumum age of a customer that can be done like this (a typical example):

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c.age).Min

Or even

dim customers= GetCustomers(开发者_JS百科)

dim youngest = (From c in customers
                 Select c).Min(Function(x) x.age)

I can't for the life of me figure out how to get the whole object (or even the index) without resorting to the sort...


Again, C# code, I'm not sure of I got it right in VB.NET

C#

  Customer youngest = customers.Aggregate((c1, c2) => (c1.age < c2.age) ? c1 : c2);

VB.NET

  dim youngest = customers.Aggregate( Function(ByVal c1, ByVal c2) IF( (c1.age < c2.age) , c1 , c2  ) );


There is no such operator in regular LINQ which will avoid sorting of the entire IEnumerable. But you're not the first one who needs a solution. For example check out Jason's answer here (though it's MaxBy and C# but you'll get an idea): Simple LINQ question in C#

Or MinBy from MoreLinq


You are almost there. You should find that

dim youngest = (From c in customers
                Order By c.age Ascending
                Select c).First

does what you are looking for. (I am a C# guy, not a VB.NET guy, so my syntax may be off a bit.)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜