2016-04-16 5 views
1

В моей базе данных sql не указаны владельцы кода ошибки, эти данные хранятся в XML-файле. Можно ли Groupby FaultCodeOwner, когда эти данные поступают из внешнего источника?C# Linq Назначить анонимный тип в 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, а затем передать ее как параметр out в getFacultCodeOwner, который назначит вам это.

+0

Спасибо за руководство Ignaus. Это сработало. Однако мне пришлось удалить FaultCodeOwnerType faultCodeOwner ;. Но как только я это сделал, он работал так, как я этого хотел. – EMIE

2

Вы не можете группировать ничего, что не в базе данных, не доводя результаты запроса в памяти первым.

Вставка ToEnumerable или ToList после того, как метод Where сделает это. К сожалению, вы можете принести больше данных в память, чем в противном случае.

Смежные вопросы