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
};
Я не могу гарантировать, что это сработает, но, вероятно, стоит попробовать (если кто-то не публикует что-то более определенное).