Bltoolkit: come ottenere il set di risultati di detail maestro usando LINQ?
-
28-10-2019 - |
Domanda
Ecco un esempio di associazione di elenchi prelevati Documentazione di Bltoolkit:
from p in db.Product
select new
{
p.OrderDetails.Count,
p.ProductName
};
dove
class Product
{
[PrimaryKey, Identity]
public int ProductID;
public string ProductName;
[Association(ThisKey="ProductID", OtherKey="ProductID")]
public List<OrderDetail> OrderDetails;
}
È possibile ottenere un elenco di prodotti con dettagli sull'ordine per ogni prodotto come questo:
from p in db.Product
select new
{
Details = p.OrderDetails,
p.ProductName
};
Il codice sopra lancia LinqException con il seguente messaggio:
Impossibile trovare il convertitore per il 'System.collections.generic.list`1 [[OrderDetail, TestProject, versione = 1.0.0.0, Culture = Neutral, PublicKeyToken = Null]]'.
Soluzione
Usando il normale provider Linq a SQL questo funzionerebbe bene. Con il provider Linq di Bltoolkit non lo so.
Altri suggerimenti
Anche se non ho usato il bltoolkit, potresti provare a usare una classe che definisci piuttosto che fare affidamento su un tipo anonimo.
Cioè, potresti definire una classe chiamata MyOrder
che ha proprietà String ProductName
e List<OrderDetail> OrderDetails
, quindi cambia la tua query Linq in qualcosa di simile:
from p in db.Product
select new MyOrder
{
OrderDetails = p.OrderDetails,
ProductName = p.ProductName
};
Non posso garantire che questo funzioni, ma probabilmente vale la pena (a meno che qualcuno non pubblica qualcosa di più definitivo).