グループ化された後、製品データ型を返すには、LINQ クエリが必要です。匿名の疑似家族に包まれているようです。
p.ID と p.Name などが必要なだけで、気にしない Product のプロパティがいくつかあります。
これで現時点で発生しているエラーは次のとおりです。
The entity or complex type 'DatabaseModel.Product' cannot be constructed in a LINQ to Entities query.
これは私の方法です:
public static List<Product> GetSellableSpecialOffers(DatabaseEntities db)
{
var query = from p in db.Products
where (p.Visible == true && p.Active == true)
&& p.ShowInSpecialOffers == true
group p by p.FamilyID == null ? 0 : p.FamilyID into f
select new Product {
ID = f.First().ID,
Name = f.First().Name,
Cost = f.First().Cost,
RRP = f.First().RRP
};
return query.ToList();
}
何が問題ですか?これを回避するより良い方法はありますか?SQL は、オブジェクトをセカンダリ データ型に入れる代わりに、常に 1 つのレコードを返しますが、わかりません。
どうもありがとう、
編集1:
仕様を拡張して申し訳ありませんが、返された製品をプログラムで生成する必要があります。
select new Product {
ID = f.First().ID,
Name = f.First().Name,
Cost = f.OrderBy(p => p.NowCost).FirstOrDefault(),
RRP = f.First().RRP
}
または、ファミリ クラスを厳密に型指定できる場合:
public partial class ProductFamily
{
public Product GroupedProduct
{
get
{
return this.Products.OrderBy(p => p.NowCost).FirstOrDefault();
}
}
}
それから私はするだろう:
var query = (from p in db.Products
where (p.Visible == true && p.Active == true)
&& p.ShowInSpecialOffers == true
group p by p.ProductFamily == null ? null : p.ProductFamily into f
select f.GroupedProduct).ToList<Product>();
しかし、私が持っているもので動作するソリューションを得ることができません。