を照会私は、これはすでに以前に議論されてきた、と私は慎重に読み、それらのすべてをしようとしているが、すべてのソリューションはしばらくI明示リストを返さ知っていますすでに実装されている非同期ページングメソッドにフィードするためにIQueryableを返す必要があります。エンティティまたは複合型「XYZ」はエンティティへのLINQで構築することはできませんが、
はASP NET MVC5 Webアプリケーション、EF6、任意のカテゴリの翻訳を意味し、次のクエリはp.Category.CategoryTransでALL CategoryTransを返す2015
public partial class Product
{
public int? ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
public virtual CategoryTrans CategoryTrans { get; set; }
}
public partial class Category
{
public int ID { get; set; }
public string Name { get; set; }
public int? ParentID { get; set; }
public bool IsDeleted { get; set; }
public virtual ICollection<Product> Products { get; set; }
public virtual ICollection<CategoryTrans> CategoryTrans { get; set; }
}
public class ISO_Languages
{
public int ID { get; set; }
public string code { get; set; }
public bool IsEnabled { get; set; }
public string name_en { get; set; }
public string name_fr { get; set; }
public string name_it { get; set; }
public string name_de { get; set; }
public string name_es { get; set; }
}
public class CategoryTrans
{
[Key, Column(Order = 1)]
public int category_id { get; set; }
[Key, Column(Order = 2)]
public int language_id { get; set; }
[ForeignKey("category_id")]
public virtual Category categoryId { get; set; }
[ForeignKey("language_id")]
public virtual ISO_Languages languageId { get; set; }
public string name { get; set; }
}
Visual Studioは、(それが出発点だ しかし、私が必要とするものではありません):
public static IQueryable<Product> ActiveProductsPerUser(BaseContext db, string userid, string culture)
{
var query = (from p in db.Products
join ct in db.CategoryTrans
on p.CategoryID equals ct.category_id
join l in db.ISO_Languages
on ct.language_id equals l.ID
where l.code.Substring(0, 2) == culture
select p);
return query;
}
私がしようとしていることは、すべての製品について、単一のカテゴリtranslatio n、カルチャー入力パラメーターに依存します。
public static IQueryable<Product> ActiveProductsPerUser(BaseContext db, string userid, string culture)
{
var query = from p in db.Products
join ct in db.CategoryTrans
on p.CategoryID equals ct.category_id
join l in db.ISO_Languages
on ct.language_id equals l.ID
where l.code.Substring(0, 2) == culture
select new Product
{
ID = p.ID,
Name = p.Name,
Description = p.Description,
CategoryTrans = p.Category.CategoryTrans.Where(b => b.language_id.Equals(l.ID)).SingleOrDefault()
};
return query;
}
が、エラーを返す:ような何か
The entity or complex type 'xyz.DAL.Product' cannot be constructed in a LINQ to Entities query.
は、私はいくつかの選択肢を試してみましたが、どれも働きました。
public async Task<ActionResult> UserList(int? page, int sortBy = 1)
{
int currentPage = (page ?? 1);
ViewBag.CurrentPage = currentPage;
viewModel.productList = await userlist(sortBy).ReturnPages(currentPage, Constants.PageItems);
return View(viewModel);}
待望:私は間違いなく、ソート、ページング&用担当で、次の非同期メソッドに製品のIQueryableを返す必要があるとして、必要なものをLINQのオブジェクトになく、実体がある代わりに、エンティティへのLINQを返すという問題を理解します"userlist"入力は実装しようとしているメソッドで返されるProduct IQueryableです。
https://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query – levent
レベント、より慎重に私の記事を読んでくれてありがとう。私はその投稿を読んで、解決策がリストを返すことを提案しました。それは私が必要とするものではありません。 – Luke
OK sory .. l.code.Substring(0、2)== culture'と 'B => b.language_id.Equals(l.ID)' 'の違いは何ですか? – levent