2016-04-16 45 views
1

我的sql数据库不包含错误代码所有者,这些细节存储在一个xml文件中当数据来自外部源时,Groupby FaultCodeOwner是否可能?C#Linq Assign Anonymous Type in GroupBy

我得到以下错误:无法分配无效匿名类型属性

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

回答

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类型的变量,然后将其作为输出参数传递给getFacultCodeOwner,该参数将为您分配它。

+0

感谢Ignaus的指导。有效。但是,我不得不删除FaultCodeOwnerType faultCodeOwner ;.但是一旦我做了,它就像我想要的那样工作。 – EMIE

2

您无法通过任何不是在数据库中不首先把你的查询结果在内存组。

在Where方法之后插入ToEnumerable或ToList会做到这一点。不幸的是,你可能会在内存中带来更多的数据。