C# 按降序排序linq查询
我无法计算如何通过C# 按降序排序linq查询,c#,.net,linq,C#,.net,Linq,我无法计算如何通过LatLong(使用最新条目)将以下查询区分开来: 提前感谢您的帮助。添加以下内容: var distinct = query.DistinctBy(x => x.LatLong); // requires MoreLinq 或 或者将它们结合起来: var result = query.DistinctBy(x => x.LatLong).OrderBy(x => x.LatLong); 试一试 你的问题是匿名类型 因为匿名类型上的Equals和GetH
LatLong
(使用最新条目)将以下查询区分开来:
提前感谢您的帮助。添加以下内容:
var distinct = query.DistinctBy(x => x.LatLong); // requires MoreLinq
或
或者将它们结合起来:
var result = query.DistinctBy(x => x.LatLong).OrderBy(x => x.LatLong);
试一试
你的问题是匿名类型 因为匿名类型上的Equals和GetHashCode方法是 根据的Equals和GetHashcode方法定义 属性,相同匿名类型的两个实例只有在 它们的所有性质都是相同的。 为此,使用适当的
Equals
方法定义适当的类型,因为Distinct
调用嵌套类型的标准Equals
我从未见过接收lambda的distinct过载。这应该可以做到:
var query = from ent in db.Entrants
//get the most recent entry first
orderby ent.idx descending
//group the entries by LatLong so we can get a distinct entry for each latlong
group ent by ent.LatLong into grouped
//get the most recent one
let ent = grouped.First()
select new
{
ent.idx,
ent.LatLong,
ent.Tip,
ent.FirstName,
ent.City,
ent.Fragrance
};
我不确定您要按哪个列排序以获取最新条目,因此我按idx降序排序,但您可以将其更改为您喜欢的任何列。此行
var groups = db.Entrants.GroupBy(ent => ent.LatLong);
将为您提供组的枚举,每个组都包含给定LatLong
的所有条目。现在,我不知道如何判断哪个条目是最新的,但是如果您知道它们即将结束db.Entrants
,那么您可以使用
var mostRecentPerLatLong = groups.Select(g => g.Last());
var mostRecentPerLatLong = groups.Select(g => g.First());
var mostRecentPerLatLong =
groups.Select(g => g.OrderByDescending(e => e.idx).First());
或者如果你知道他们在一开始你可以使用
var mostRecentPerLatLong = groups.Select(g => g.Last());
var mostRecentPerLatLong = groups.Select(g => g.First());
var mostRecentPerLatLong =
groups.Select(g => g.OrderByDescending(e => e.idx).First());
或者可能是通过idx
,所以您可以使用
var mostRecentPerLatLong = groups.Select(g => g.Last());
var mostRecentPerLatLong = groups.Select(g => g.First());
var mostRecentPerLatLong =
groups.Select(g => g.OrderByDescending(e => e.idx).First());
然后您可以创建对象:
var query = mostRecentPerLatLong.Select(ent => new { ... } );
听起来你需要使用分组
from ent in db.Entrants
group ent by ent.LatLong into grp
let b = grp.OrderByDescending(x=>x.idx).First();
select new {
b.idx,
b.LatLong,
b.Tip,
b.FirstName,
b.City,
b.Fragrance
};
所以你担心顺序或清晰度吗?基本上,我只想从每个lat long中获取最新的条目,所以每个latlong不会获得超过一个条目。当一个新人进来时,我希望他们的latlong能被使用,而不是其他任何具有相同latlong的人。如果有意义,则“无法将lambda表达式转换为IEquality类型,因为它不是委托类型。”Distinct(x=>x.LatLong)上的错误;当然,你是对的;我总是把清晰和清晰混为一谈。为此,您需要MoreLinq库;看,美女!谢谢,我会在3分钟内接受,如果允许的话:)