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()
});
如果不先将查询结果放入内存,则无法按数据库中不存在的任何内容进行分组。
在 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
,这将为你分配它。