C#Linq在GroupBy中分配匿名类型

C#Linq在GroupBy中分配匿名类型,c#,sql,linq,C#,Sql,Linq,我的sql数据库不包括故障代码所有者,这些详细信息存储在xml文件中。当数据来自外部源时,是否可以按故障代码所有者分组 我收到以下错误:无法将void分配给匿名类型属性 var query = referenceDt.AsEnumerable() .Where(results => declarations.CaapcityIssues.Contains((results.Field<string>("FabricName"))))

我的sql数据库不包括故障代码所有者,这些详细信息存储在xml文件中。当数据来自外部源时,是否可以按故障代码所有者分组

我收到以下错误:无法将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()
            });
var query=referenceDt.AsEnumerable()
.Where(results=>declarations.caapcityssues.Contains((results.Field(“FabricName”)))
.GroupBy(结果=>新建)
{
**FaultCodeOwner=faultCodeDetails.getFacultCodeOwner(results.Field(“FaultCode”),out owner)**
})
.OrderBy(newFaultCodes=>newFaultCodes.Key.FaultCodeOnwer)
.选择(newFaultCodes=>new
{
FaultCodeOwner=newFaultCodes.Key.FaultCodeOwner,
Count=newFaultCodes.Count()
});

如果不首先将查询结果放入内存,则无法按数据库中以外的任何内容进行分组


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

GroupBy
方法更改为:

.GroupBy(results =>
{
    FaultCodeOwnerType faultCodeOwner; // rename FaultCodeOwnerType to the type of FaultCodeOwner
    faultCodeDetails.getFacultCodeOwner(results.Field<int>("FaultCode"), out faultCodeOwner);
    return new
    {
        FaultCodeOwner = faultCodeOwner
    };
})
.GroupBy(结果=>
{
FaultCodeOwnerType faultCodeOwner;//将FaultCodeOwnerType重命名为faultCodeOwner的类型
faultCodeDetails.getFaultCodeOwner(results.Field(“FaultCode”),out faultCodeOwner);
还新
{
FaultCodeOwner=FaultCodeOwner
};
})

faultCodeDetails.getFacultCodeOwner
返回
void
,因此无法为其分配变量。您必须首先声明FaultCodeOwner类型的变量,然后将其作为输出参数传递给
GetFaultCodeOwner
,后者将为您分配该变量。

感谢您的指导信号。成功了。但是,我必须删除faultCodeOwner;类型faultCodeOwner;。但一旦我这么做了,它就像我想要的那样工作。