2010-01-22 3 views
17

Как я могу получить кортежи при выборе с помощью EF4?Return Tuple from EF select

 var productCount = (from product in context.products 
        select new Tuple<Product, int>(product, products.Orders.Count)); 

Или

 var productCount = (from product in context.products 
        select Tuple.Create(product, products.Orders.Count)); 

Entity рамка говорит, что не можешь использовать не пустой конструктор для первого случая, и не признают метод Tuple.Create для второго.

ответ

19

Как о переходе на LINQ-to-Objects для проекции:

var productCount = from product in context.products 
       select new {Product = product, Count = products.Orders.Count }; 
var final = from item in productCount.AsEnumerable() 
      select Tuple.Create(item.Product, item.Count); 
+1

Это будет единственный вариант: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=520269 –

+0

Не мешок угадывает, Рассмотрение; -p Я поддержал элемент «connect». –

+0

Я делаю это. Но не существует лучшего выбора? –

2

Попробуйте

var productCount = from product in context.products 
        select new { product, Count = products.Orders.Count }; 

Это возвращает анонимный тип, который очень близок к кортежу http://msdn.microsoft.com/en-us/library/bb738512.aspx

+4

Я знаю это. Но анонимные типы не являются общедоступными –