2013-11-30 3 views
1

У меня есть следующий код:Невозможно привести объект типа «System.Collections.Generic.List TO System.Collections.Generic.IList

public class ComputeOperationData 
{ 
    public COUNTERS_DATA CounterData { get; set; } 
    public COMPUTES_OPERATION ComputeOperation { get; set; } 
    public COUNTERS_FORMULA CounterFormula { get; set; } 

} 

Public Function GetComputeOperationData(ByVal computeId As Integer, ByVal priodType As Integer, ByVal lstDuringTime As DuringTime) As IList(Of ComputeOperationData) Implements IComputeResultService.GetComputeOperationData 
     Dim computeOperations As IQueryable(Of COMPUTES_OPERATION) = _repository.GetObjectQuery(Of COMPUTES_OPERATION).Include("COMPUTES").Include("COUNTERS") 
     computeOperations = computeOperations.Where(Function(a) a.COMPUTE_ID = computeId) 

     Dim countersFormula As IQueryable(Of COUNTERS_FORMULA) = _repository.GetObjectQuery(Of COUNTERS_FORMULA)().Include("COUNTERS") 

     Dim countersData As IQueryable(Of DomainClasses.COUNTERS_DATA) = _repository.GetObjectQuery(Of DomainClasses.COUNTERS_DATA)().Include("COUNTERS") 
     countersData = countersData.Where(Function(a) a.PERIOD_TYPE = priodType And a.COUNTER_DATE = lstDuringTime.StartDate And a.COUNTER_TIME >= lstDuringTime.StartTime And a.COUNTER_TIME <= lstDuringTime.EndTime) 

        Dim lstComputeOperationData = From counterData In countersData 
       Join computeOperation In computeOperations On counterData.COUNTER_ID Equals computeOperation.COUNTER_ID 
       Join counterFormula In countersFormula On counterData.COUNTER_ID Equals counterFormula.COUNTER_ID 
       Where counterData.COUNTER_DATE >= counterFormula.FROM_DATE And counterData.COUNTER_DATE <= counterFormula.TO_DATE 




     Return lstComputeOperationData.ToList 

    End Function 

И я получил эту ошибку:

Невозможно передать объект типа «System.Data.Objects.ObjectQuery 1[VB$AnonymousType_1 3 [Danesh.Ems.DomainClasses.COUNTERS_DATA, Danesh.Ems.DomainClasses.COMPUTES_OPERATION, Danesh.Ems.DomainClasses.COUNTERS_FORMULA]] 'для ввода' System.Collections. Generic.IList`1 [Danesh.Ems.Models.ComputeOperationData] '

пожалуйста, помогите мне

+0

Пожалуйста, обсудите вашу проблему. Более подробная информация и рекомендации помогут вам с большей помощью. –

ответ

0

Это было некоторое время, так как я использовал VB.NET, но в C#, вам нужно что-то вроде ...

Select New ComputeOperationData() 
{ 
    CounterData = counterData, ComputeOperation = computeOperation, CounterFormula = counterFormula 
} 

... в конце вашего запрос на преобразование трех отдельных источников данных в один объект.

+0

мой новый запрос: С counterData В countersData Регистрация computeOperation В computeOperations На counterData.COUNTER_ID Равно computeOperation.COUNTER_ID Регистрация counterFormula В countersFormula На counterData.COUNTER_ID Равно counterFormula.COUNTER_ID Где counterData.COUNTER_DATE> = counterFormula.FROM_DATE И counterData.COUNTER_DATE <= counterFormula.TO_DATE Выберите Новый с {.CounterData = counterData, .ComputeOperation = computeOperation, .CounterFormula = counterFormula} , но я получил такую ​​же ошибку :-( – samira

+1

Вы по-прежнему отсутствует конструкция типа. Вы создаете анонимный класс, а не класс ComputeOperationData, который вы хотите вернуть. – RomSteady

+0

Большое вам спасибо. Моя проблема решена. – samira

0

У вас есть функция, возвращение IList(Of ComputeOperationData) но внутри вас Tru вернуть List(Of AnonymousClass)
так в вашем Linq запроса вам нужно указать, какой тип объекта, который вы хотите вернуть, как этот

Dim lstComputeOperationData = From counterData In countersData 
           Join computeOperation In computeOperations On counterData.COUNTER_ID Equals computeOperation.COUNTER_ID 
           Join counterFormula In countersFormula On counterData.COUNTER_ID Equals counterFormula.COUNTER_ID 
           Where counterData.COUNTER_DATE >= counterFormula.FROM_DATE And counterData.COUNTER_DATE <= counterFormula.TO_DATE 
           Select New ComputeOperationData With {.CounterData = counterData, .ComputeOperation = computeOperation, .CounterFormula = counterFormula} 
+0

Большое вам спасибо. Моя проблема решена – samira

0

Когда вы видите сообщение об ошибке во время выполнения : Невозможно лить объект типа Generic.List [SomeDerivedType] в Generic.IList [SomeBaseType], вам может просто понадобиться Вставьте объекты в соответствующий тип в списке перед назначением IList.

Например:

Dim objectIList As IList(Of Object) 
Dim stringList As New List(Of String) 
objectIList = stringList.Cast(Of Object).ToList() 

Это сложно, потому что компилятор не ловит это. Есть несколько вопросов, связанных с C#, которые относятся к этой проблеме. Вот one. Вот another.

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