2010-07-22 2 views
0

Я использую Linq.Dynamic. Я уже добавил еще одно расширение SelectMany для всех для создания нового анонимного объекта с данными. Но я столкнулся с другой проблемой, которую я не могу решить.Создать новый метод расширения Linq SelectMany

Я хочу иметь метод расширения цепочки следующим образом, но с использованием динамических методов:

var customerandorderflat = db.Customers 
      .SelectMany(c => c.Orders.SelectMany(o => o.Order_Details, 
       (ord, orddetail) => new 
         { 
          OrderID = ord.OrderID, 
          UnitPrice = orddetail.UnitPrice 
         }).DefaultIfEmpty(), 
       (cus, ord) => new 
        { 
         CustomerId = cus.CustomerID, 
         CompanyName = cus.CompanyName, 
         OrderId = ord.OrderID == null ? -1 : ord.OrderID, 
         UnitPrice = ord.UnitPrice 
        }); 

В идеале я хотел бы цепь динамического SelectMany следующим образом:

db.Customers.SelectMany(c => c.Orders.SelectMany("Order_Details", "new(outer.OrderID, inner.UnitPrice)"), "new(outer.CustomerID, inner.OrderID)"); 

или что-то, что аффекта. Проблема в том, что я не могу получить подпись, чтобы соответствовать.

Я пробовал много разных вариантов, чтобы получить возможность связывания. Но это просто не работает. Я имею в виду, в идеале это будет выглядеть следующим образом:

public static IQueryable SelectMany(this IQueryable source, IQueryable innerExpression, string resultsSelector, params object[] values) 

Но, он не признает C => c.Orders в IQueriable. Мне также нужно выяснить, как сделать DefaultIfEmpty по результатам, чтобы разрешить LEFT JOINs.

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

ответ

0

c.Orders является EntitySet. EntitySet не реализует IQueryable. Попробуйте c.Orders.AsQueryable()

+0

Как насчет c => c.Orders? Я попытался сделать это как c => c.Orders.AsQueryable() ОШИБКА: Невозможно преобразовать лямбда-выражение для ввода 'string', потому что это не тип делегата – Dan

+0

Это было неправильное определение. Фактическая ошибка при правильном определении: Невозможно преобразовать лямбда-выражение для ввода «System.Linq.IQueryable», потому что это не тип делегата – Dan

+0

, вы нашли решение для этого? У меня такая же проблема ... – Licentia

0

Это было неправильное определение. Фактическая ошибка при правильном определении: Невозможно преобразовать лямбда-выражение в тип «System.Linq.IQueryable», потому что это не тип делегата

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