BLToolkit: как получить набор результатов мастер-детали с помощью LINQ?

Вот пример использования списочных ассоциаций, взятых из документации BLToolkit:

from p in db.Product
select new
{
  p.OrderDetails.Count,
  p.ProductName
};

где

class Product
{
  [PrimaryKey, Identity]
  public int ProductID;

  public string ProductName;

  [Association(ThisKey="ProductID",  OtherKey="ProductID")]
  public List<OrderDetail> OrderDetails;
}

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

from p in db.Product
select new
{
  Details = p.OrderDetails,
  p.ProductName
};

Приведенный выше код выдает исключение LinqException со следующим сообщением:

Не удается найти конвертер для типа "System.Collections.Generic.List`1[[OrderDetail, TestProject, Version=1.0.0.0, Culture= нейтральный, PublicKeyToken=null]]".

2 ответа

Решение

При использовании обычного поставщика linq to sql это будет нормально работать. С провайдером BLToolkit Linq я не знаю.

Хотя я не использовал BLToolkit, вы можете попытаться использовать определенный вами класс, а не полагаться на анонимный тип.

То есть вы можете определить класс с именем MyOrder это имеет свойства String ProductName а также List<OrderDetail> OrderDetailsи затем измените ваш запрос linq на что-то вроде:

from p in db.Product
select new MyOrder
{
  OrderDetails = p.OrderDetails,
  ProductName = p.ProductName
};

Я не могу гарантировать, что это сработает, но, вероятно, стоит попробовать (если кто-то не публикует что-то более определенное).

Другие вопросы по тегам