2016-09-23 2 views
1

Эй, поэтому я довольно новичок в C#, так как мне никогда не приходилось использовать его перед началом этой работы. Я пытаюсь вернуть набор результатов из запроса linq. Однако проблема, с которой я сталкиваюсь, это тип анонимный. Я попытался создать пользовательский тип для так что я могу использовать его, но я все еще получаю ошибку:Не удается вернуть результат linq из запроса

Severity Code Description Project File Line Suppression State 
Error CS0266 Cannot implicitly convert type 'System.Linq.IQueryable<<anonymous type: 
SCSEntities.SCS_ItemCategory Category, SCSEntities.SCS_Item Item>>' to 
'System.Collections.Generic.List<SchoolCash.DataFactory.ItemFactory.ExportItemTable>'. 
An explicit conversion exists (are you missing a cast?) SchoolCash.DataFactory 
C:\seamysCode\SCA\4.12\Common\SchoolCash.DataFactory\ItemFactory.cs 551 Active 

Так что я интересно, я пропускаю что-то здесь, потому что материал, который я посмотрел на говорит, чтобы создать настраиваемый тип с помощью get и setter по мере необходимости. Тогда я смогу вернуть его. Мне было интересно, может ли кто-нибудь помочь мне в этом, потому что мои ограниченные глаза видят, что я делаю это правильно. Я ценю помощь заранее.

public class ExportItemTable 
    { 
     public SCS_ItemCategory Category { get; set; } 
     public Item Item { get; set; } 
    } 

    public List<ExportItemTable> GetItemExportTable() 
    { 

     var result = 

     from item in Context.SCS_Items 
     join category in Context.SCS_ItemCategories 
     on item.ItemPk equals category.ItemFk 
     into temp 
     from category in temp.DefaultIfEmpty() 

     select new 
     { 
     Category = category, 
     Item = item 
     }; 

     return result.ToList();; 
    } 
+1

ошибка говорит вам, в чем проблема .. и вы должны вернуть запрос к типу, который он ожидает, который является списком , поэтому вы просто используете методы расширения, предоставленные вам в Linq, и используйте '.ToList () ', если тип return ожидает массив. Затем тот же' .ToArray() 'есть множество бесплатных обучающих программ, а также MSDN вы можете загрузить целую тонну учебников, в которых есть исходный код, где вы можете поиграть и узнать в то же время – MethodMan

ответ

4

Этот код создает анонимный тип:

select new 
{ 
    Category = category, 
    Item = item 
} 

Вам просто нужно создать экземпляр нужного типа, как это:

select new ExportItemTable() 
{ 
    Category = category, 
    Item = item 
} 

В некоторых языках (например, машинопись), если у вас есть объект, который соответствует свойствам ожидаемого типа, компилятор увидит их как одно и то же. C# не делает этого и заставляет вас явно создавать экземпляр типа, который вы хотите использовать.

0

Изменить следующим образом:

select new ExportItemTable 
      { 
      Category = category, 
      Item = item 
      }; 

return result.AsEnumerable().ToList() 

Детали:

  • Вам нужно ExportItemTable как результат, поэтому не может использовать Anonymous type, при условии, что Category and Item имеют тип отображения
  • Теперь вы получите IQueryable<ExportItemTable> , но вам необходимо вернуть List<ExportItemTable>, поэтому конвертировать, как показано ниже,
Смежные вопросы