2017-04-04 63 views
4

我有一些困難,爲我的LINQ查詢中包含的項目添加一些過濾條件。我的查詢就像實體框架包含過濾器子集合

var item = _Context.Order.Include("Inner") 
      .Include("Inner.first") 
      .Include("Inner.second") 
      .Where(x => (!(x.IsDeleted) && (x.IsActive) && 
       (x.itemid == id))).FirstOrDefault(); 

在上面的代碼中「Inner」是另一個項目列表。現在我需要過濾內部物品。我只需要過濾條件inner.isDeleted = true的內部項目。

查詢應返回一類像,

public class Order 
{ 

    public string Name { get; set; } 
    public List<InnerDetails> Inner{ get; set; } 
    public bool IsDeleted { get; set; } 
} 

和InnerDetails類像

任何人都可以建議我一個更好的方法來做到這一點,因爲我在LINQ和EF

+0

究竟是你想過濾 - 你想,只包括order.inner.isdeleted的從order.inner條目,或者你要刪除的整個記錄例如不符合條件的整行訂單?如果是第二個,那麼如果你有兩個條目order.inner,其中isDeleted = true,其中isDeleted = false – Alex

+0

@Alex:我在問題中提到'我只需要內部過濾條件的內部項目。 isDeleted = true。',即我只需要包含刪除的內部記錄(inner.isDeleted = true)。這只是內部記錄,這不會影響外部記錄。 –

+0

看來你正試圖過濾嵌套列表。我認爲這個問題可能會幫助你http://stackoverflow.com/questions/25183685/how-to-filter-nested-list-using-linq-lambda和這一個http://stackoverflow.com/questions/7079378/how -to-filter-nested-collection-entity-framework-objects – Alex

回答

3

免責聲明:我是該項目的業主Entity Framework Plus

EF + Query IncludeFilter功能允許過濾相關實體。

var item = _Context.Order 
      .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted)) 
      .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted).Select(y => y.first)) 
      .IncludeFilter(x => x.Inner.Where(y => y.IsDeleted).Select(y => y.second)) 
      .Where(x => (!(x.IsDeleted) && (x.IsActive) && 
       (x.itemid == id))).FirstOrDefault(); 

注:不能MIXTE包括& & IncludeFilter。

百科:EF+ Query IncludeFilter

編輯:答案子問題

但是我們可以做到這一點使用EF僅

是,引擎蓋下,我的圖書館使用類似方案如投影

var item = _Context.Order.Select(x => new { 
       Order = x, 
       Inner = x.Inner.Where(y => y.IsDeleted), 
       first = x.Inner.Where(y => y.IsDeleted).Select(y => y.first) 
       second = x.Inner.Where(y => y.IsDeleted).Select(y => y.second) 
      }) 
      .Where(x => (!(x.IsDeleted) && (x.IsActive) && (x.itemid == id))) 
      .FirstOrDefault() 
      .Select(x => x.Order) 
      .FirstOrDefault(); 

注:代碼沒有經過測試

+0

我可以問我們需要添加EF +參考還是什麼? –

+0

是的,您需要添加引用此庫並添加「使用Z.EntityFramework.Plus」命名空間才能使用IncludeFilter功能。 –

+0

但是我們只能使用EF來實現這一點。在我的答案 –