在LINQ2DataSet中指定返回行

时间:2008-11-14 01:30:25

标签: c# .net linq linq-to-dataset

我需要从DataTable中提取不同的行子集,并认为LINQ2DataSets可能是一种有用且干净的方法,但是看起来不可能简单地将LINQ2DS查询中的返回行标识为如下

var result = from r in fips.AsEnumerable() select
r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
r.Field<string>("PROCESS_SUB_GROUP_NAME"),
r.Field<string>("...

因为我在第一个逗号后开始收到错误。

这是一个正确的假设吗?我如何绕过它来从数据集中返回我可以应用Distinct()方法的列的子集?

1 个答案:

答案 0 :(得分:4)

您忘记了新的声明和字段名称:

var result = from r 
    in fips.AsEnumerable() 
    select new
    {
        FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
        GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
        Item3 = r.Field<string>("Item3")
    };

您还可以明确声明您将使用类型:

var result = from r 
    in fips.AsEnumerable() 
    select new MyType("InitClassParams") 
    {
        FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
        GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
        Item3 = r.Field<string>("Item3")
    };

Scott Guthrie(微软开发人员Devision)有一些关于LINQ的好信息(他讲的是LINQ to SQL,但大部分内容都适用于此。)

然后应用distinct子句:

var result = from r 
    in fips.AsEnumerable() 
    select new
    {
        FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
        GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
        Item3 = r.Field<string>("Item3")
    }
    distinct;

然后将其放入列表或迭代它。在运行以下内容之前,不会选择/区分/等等:

var list = result.ToList()
foreach(var item in result) {}