0
我想做類似的事情;過濾FirstOrDefault()之前的結果然後使用FirstOrDefault()
Context.Users.Include("Addresses", a => a.IsRowDeleted == false).FirstOrDefault(u => u.UserId == 5);
我是說;我想過濾包含的實體,但並不總是,它也必須是可選的。
這是最好的解決方案是什麼?請幫我,
我想做類似的事情;過濾FirstOrDefault()之前的結果然後使用FirstOrDefault()
Context.Users.Include("Addresses", a => a.IsRowDeleted == false).FirstOrDefault(u => u.UserId == 5);
我是說;我想過濾包含的實體,但並不總是,它也必須是可選的。
這是最好的解決方案是什麼?請幫我,
在EF您不能過濾急於加載的數據。 Include
操作不支持篩選或排序。
您必須使用投影定製型(或匿名類型):
var query = from u in context.Users
where u.UserId == 5
select new UserFiltered
{
User = u,
Addresses = u.Addresses.Where(a => !a.IsRowDeleted)
};
UserFiltered u = query.FirstOrDefault();
,或者您必須devide查詢分成兩個分開的查詢和使用明確的加載:
context.ContextOptions.LazyLoadingEnabled = false;
var user = context.Users.FirstOrDefault(u => u.UserId == 5);
((EntityCollection<Address>)user.Addresses)
.CreateSourceQuery()
.Where(a => !a.IsRowDeleted)
.Execute();
或者你可以只需使用兩個查詢:
var user = context.Users.FirstOrDefault(u => u.UserId == 5);
var addresses = context.Addresses.Where(a => a.User.UserId == 5 && !a.IsRowDeleted).ToList();
你的意思是這樣(警告:未經測試的代碼):
Context.Users.SingleOrDefault(u => u.Addresses.Where(a => a.IsRowDeleted == false).Count > 0) && u.UserId == 5);
請問您能更清楚地詢問您想問什麼?如果你可以舉例說明會很好。包含定義在哪裏? – Maheep 2012-01-30 04:15:55