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

本文关键字:类型 分配 Linq GroupBy | 更新日期: 2024-09-24 04:00:13

我的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()
            });

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

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

在 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
    };
})

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