如何使用LINQ返回多个自选字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用LINQ返回多个自选字段相关的知识,希望对你有一定的参考价值。

参考技术A 以下是一个自己查询的LINQ返回多个自选字段的方法

首先,定义一个所需字段的类class,然后在LINQ 语句中使用select new 子句,由于要使用排重,所以为disctinct添加了IEqualityComparer,具体代码如下:

public partial class NewCars_Pedia : PageBase
  

public class PediaCategory

public string ColumnClass get; set;
public string CategoryChn get; set;


public class PediaComparer : IEqualityComparer<PediaCategory>

public bool Equals(PediaCategory source, PediaCategory dest)

return source.ColumnClass == dest.ColumnClass;


public int GetHashCode(PediaCategory obj)

return obj.ColumnClass.GetHashCode();



  void OnInit()

DataTable dt = ParaCustom.GetAllPideaItems();
var lc = (from p in dt.AsEnumerable() select new PediaCategory ColumnClass = p.Field<string>("columnClass"), CategoryChn = p.Field<string>("CategoryChn") ).Distinct(new PediaComparer());

rptFather.DataSource = lc.ToList();
rptFather.DataBind();

...

具有多个字段的 LINQ OrderBy

【中文标题】具有多个字段的 LINQ OrderBy【英文标题】:LINQ OrderBy with more than one field 【发布时间】:2010-06-15 17:23:12 【问题描述】:

我有一个需要按两个字段排序的列表。我曾尝试在 LINQ 中使用 OrderBy,但这只允许我指定一个字段。我正在寻找要按第一个字段排序的列表,然后在第一个字段中是否有任何重复项以按第二个字段排序。

例如,我希望结果看起来像这样(按姓氏然后名字排序)。

亚当斯,约翰 史密斯,詹姆斯 史密斯,彼得 汤普森,弗雷德

我已经看到您可以使用 SQL like syntax to accomplish this,但我正在寻找一种使用 OrderBy 方法的方法。

IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.

【问题讨论】:

【参考方案1】:

你需要使用ThenBy:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

【讨论】:

这里列出了完整的解释:weblogs.asp.net/zeeshanhirani/archive/2008/04/16/… 这是 Lambda .. LINQ 解决方案需要 @svick 在 LINQ 中有它。 我不确定你的意思。查询语法只是上述方法语法的糖;两者都是“LINQ”。见msdn.microsoft.com/en-us/library/vstudio/bb397947.aspx如果你读过这个问题,他特别要求方法语法版本。【参考方案2】:

如果您想使用方法语法,请使用ThenBy(),正如其他人建议的那样:

listOfPeople.OrderBy(person => person.LastName)
            .ThenBy(person => person.FirstName)

在查询语法中,几乎可以按照您想要的方式完成相同的操作:两个排序键,用逗号分隔:

from person in listOfPeople
orderby person.LastName, person.FirstName
select person

上面的代码实际上会被编译成使用OrderBy()ThenBy()的代码,就像第一个例子一样。

另外,如果您希望 OrderBy() 具有两个(或更多)排序键,您当然可以将其写为 IEnumerable&lt;T&gt; 上的扩展方法,内部调用 OrderBy()ThenBy()

【讨论】:

【参考方案3】:

您的后续字段应使用 ThenBy() 方法进行排序

【讨论】:

【参考方案4】:

使用.ThenBy(aPerson=&gt;field2);

【讨论】:

【参考方案5】:
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);

【讨论】:

【参考方案6】:

更多字段的排序方法如下:

var soterdList = initialList.OrderBy(x => x.Priority).
                                    ThenBy(x => x.ArrivalDate).
                                    ThenBy(x => x.ShipDate);

您可以使用 clasole "ThenBy" 添加其他字段

【讨论】:

以上是关于如何使用LINQ返回多个自选字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 LINQ 中对单个连接中的多个字段进行连接

C# Linq to sql 实现 group by 统计多字段 返回多字段

使用 Linq 将所有字段转换为大写

我可以在 LINQ 插入后返回“id”字段吗?

C# linq 字段排序如何排除0从1开始排序

获取Linq查询的字段值 - SharePoint