C# Linq:按ID分组,按级别排序,然后按字母顺序排列
所以我有一个数据视图,它可以提取一些与机构相关的信息,我想按机构对数据进行分组,这样名称只出现一次,然后按字母顺序排列,然后按级别排列。级别将指级别1、级别2、级别3。在Linq有可能做到这一点吗?如果是,怎么做?谢谢C# Linq:按ID分组,按级别排序,然后按字母顺序排列,c#,linq,linq-to-dataset,C#,Linq,Linq To Dataset,所以我有一个数据视图,它可以提取一些与机构相关的信息,我想按机构对数据进行分组,这样名称只出现一次,然后按字母顺序排列,然后按级别排列。级别将指级别1、级别2、级别3。在Linq有可能做到这一点吗?如果是,怎么做?谢谢 EnumerableRowCollection<DataRow> query = from agency in dtAllContacts.AsEnumerable() orderby agency.Field<Int32?>("ID
EnumerableRowCollection<DataRow> query =
from agency in dtAllContacts.AsEnumerable()
orderby agency.Field<Int32?>("ID") == null ? 0 : agency.Field<Int32>("ID")
orderby agency.Field<Int32>("Level")
select agency;
EnumerablerRowCollection查询=
来自dtAllContacts.AsEnumerable()中的代理
orderby agency.Field(“ID”)==null?0:代理字段(“ID”)
orderby agency.字段(“级别”)
选择代理机构;
您当前的代码不起作用,因为您对集合进行了两次排序—第一次是按id排序,第二次是按级别排序。您需要的是同时按id和级别进行排序。因此,您需要单个orderby
运算符:
from agency in dtAllContacts.AsEnumerable()
orderby agency.Field<Int32?>("ID") == null ? 0 : agency.Field<Int32>("ID"),
agency.Field<Int32>("Level")
select agency;
来自dtAllContacts.AsEnumerable()中的代理
orderby agency.Field(“ID”)==null?0:代理字段(“ID”),
机构领域(“级别”)
选择代理机构;
这将生成一个操作符。您还可以使用可为null类型的方法简化第一个条件:
orderby agency.Field<int?>("ID").GetValueOrDefault(),
agency.Field<int>("Level")
orderby agency.Field(“ID”).GetValueOrDefault(),
机构领域(“级别”)
您当前的代码不起作用,因为您对集合进行了两次排序—第一次是按id排序,第二次是按级别排序。您需要的是同时按id和级别进行排序。因此,您需要单个orderby
运算符:
from agency in dtAllContacts.AsEnumerable()
orderby agency.Field<Int32?>("ID") == null ? 0 : agency.Field<Int32>("ID"),
agency.Field<Int32>("Level")
select agency;
来自dtAllContacts.AsEnumerable()中的代理
orderby agency.Field(“ID”)==null?0:代理字段(“ID”),
机构领域(“级别”)
选择代理机构;
这将生成一个操作符。您还可以使用可为null类型的方法简化第一个条件:
orderby agency.Field<int?>("ID").GetValueOrDefault(),
agency.Field<int>("Level")
orderby agency.Field(“ID”).GetValueOrDefault(),
机构领域(“级别”)
我想您也可以使用agency.Field(“ID”)??0
。嘿,busyberezovsky,分组怎么样?(“我想按机构对数据进行分组,然后按顺序排列”)@GertArnold嘿,我认为行将按ID进行“分组”(因为先按ID排序)。所以OP想要得到行集合类型的结果,我们可以对行进行分组,然后选择Many,但这可能会产生和按IDIO排序完全相同的结果。我把它读作groupby
。无论如何,这是OP的电话。我想你也可以使用agency.Field(“ID”)??0
。嘿,busyberezovsky,分组怎么样?(“我想按机构对数据进行分组,然后按顺序排列”)@GertArnold嘿,我认为行将按ID进行“分组”(因为先按ID排序)。所以OP想要得到行集合类型的结果,我们可以对行进行分组,然后选择Many,但这可能会产生和按IDIO排序完全相同的结果。我把它读作groupby
。不管怎么说,这是行动的电话。