在 dt.AsEnumerable() 中使用 from DataRow dRow 在 C# .NET 中创建不同的有序列表
Posted
技术标签:
【中文标题】在 dt.AsEnumerable() 中使用 from DataRow dRow 在 C# .NET 中创建不同的有序列表【英文标题】:Using from DataRow dRow in dt.AsEnumerable() to create a distinct ordered list in C# .NET 【发布时间】:2021-07-11 20:58:48 【问题描述】:我有以下代码,但在如何维护订单方面存在问题:
var cars = (from DataRow dRow in dt.AsEnumerable()
select new
Car = dRow["Car"],
CarId = dRow["CarId"],
CarOrder = dRow["CarOrder"]
).Distinct();
distinct 效果很好,但我需要保留从 1 到 X(升序)的 CarOrder。
DataTable dt 将它们全部按正确顺序排列,但是当它遇到这个不同的代码时,顺序不会被保留。
我正在尝试弄清楚如何使用 OrderBy 子句。
【问题讨论】:
我不明白这个问题。您在使用OrderBy()
(或查询语法order by
)时遇到问题?怎么了?您现有的代码不保证任何顺序。
如何在具有 Distinct 的 CarOrder 上使用 OrderBy?我不确定如何使用它。
您在 Distinct 通话后添加 .OrderBy
。你知道 OrderBy 是如何工作的吗?
我认为您需要回去了解 LINQ 的工作原理。您不能将字符串参数传递给 OrderBy。请阅读on how it works。你的声誉是我的两倍,所以我希望你已经做到了这一点。
这能回答你的问题吗? LINQ : Distinct and Orderby
【参考方案1】:
根据docs
它返回源中唯一项的无序序列
这意味着订单不会得到保留。所以你可以做的可能是OrderBy()
在Distinct()
之后如下:
var cars = (from DataRow dRow in dt.AsEnumerable()
select new
Car = dRow["Car"],
CarId = dRow["CarId"],
CarOrder = dRow["CarOrder"]
).Distinct().OrderBy(x => x.CarOrder);
见:Does Distinct() method keep original ordering of sequence intact?
【讨论】:
以上是关于在 dt.AsEnumerable() 中使用 from DataRow dRow 在 C# .NET 中创建不同的有序列表的主要内容,如果未能解决你的问题,请参考以下文章
var query = dt.AsEnumerable().ToList().Where(o => o.Field<string>("CampaignName")