C#Linq在GroupBy

时间:2016-04-16 20:50:52

标签: c# sql linq

我的sql数据库不包含故障代码所有者,这些详细信息存储在xml文件中当数据来自外部源时,是否可以使用Groupby FaultCodeOwner?

我收到以下错误:无法将void分配给匿名类型属性

        var query = referenceDt.AsEnumerable()
            .Where(results => declarations.CaapcityIssues.Contains((results.Field<string>("FabricName"))))
            .GroupBy(results => new
            {
                **FaultCodeOwner = faultCodeDetails.getFacultCodeOwner(results.Field<int>("FaultCode"), out owner)**
            })
            .OrderBy(newFaultCodes => newFaultCodes.Key.FaultCodeOnwer)
            .Select(newFaultCodes => new
            {
                FaultCodeOwner = newFaultCodes.Key.FaultCodeOwner,
                Count = newFaultCodes.Count()
            });

2 个答案:

答案 0 :(得分:2)

如果不先将查询结果存入内存,则无法对数据库中没有的任何内容进行分组。

在Where方法执行此操作后插入ToEnumerable或ToList。不幸的是,你可能会在内存中带来比你原来更多的数据。

答案 1 :(得分:1)

GroupBy方法更改为:

.GroupBy(results =>
{
    FaultCodeOwnerType faultCodeOwner; // rename FaultCodeOwnerType to the type of FaultCodeOwner
    faultCodeDetails.getFacultCodeOwner(results.Field<int>("FaultCode"), out faultCodeOwner);
    return new
    {
        FaultCodeOwner = faultCodeOwner
    };
})

faultCodeDetails.getFacultCodeOwner会返回void,因此您无法为其指定变量。您必须首先声明FaultCodeOwner类型的变量,然后将其作为out参数传递给getFacultCodeOwner,它将为您分配。