2011-11-20 127 views
4

我想过滤LINQ查询筛选基于另一个查询结果的结果LINQ查询

我有2个LINQ语句

首届得到所有我想要的店和2号是我根据第一个查询中找到的结果过滤信息。

var stores = ctx.Stores.Where(ps => ps.ParentStoreID == parent.ParentStoreID && ps.StoreID!=storeID); 

var query = (from a in ctx.TransactionTable 
      from b in ctx.MappingTable.Where(x => x.TransactionId== a.TransactionId).DefaultIfEmpty() 
      where a.StoreID!=storeID 
       select new 
          { 
           Transactions = a, 
           Mapping = b 
          }).ToList(); 

如何添加另一个where子句到我的第二查询只返回那里a.StoreId包含内的商店造成的结果吗?

回答

2

像这样:

var stores = ctx.Stores.Where(ps => ps.ParentStoreID == parent.ParentStoreID && ps.StoreID!=storeID); 

var query = (from a in ctx.TransactionTable 
      from b in ctx.MappingTable.Where(x => x.TransactionId==a.TransactionId).DefaultIfEmpty() 
      where a.StoreID!=storeID && stores.Select(s => s.StoreID).Contains(a.StoreID) 
      select new 
      { 
       Transactions = a, 
       Mapping = b 
      }).ToList(); 

您可以在这里找到更多的信息: Linq to Entities - SQL "IN" clause

+0

而不是'stores.Select(S => s.StoreID)。载有(a.StoreID)'你可以还写出较短的'stores.Any(s => s.StoreID == a.StoreID)'。我相信翻译成SQL的方式都是一样的。 – Timwi

+0

谢谢大卫。我错过了stores.Select(s => s.StoreId)在尝试包含之前。 –