【问题标题】:filter a linq query based on the results of another query's results根据另一个查询的结果过滤 linq 查询
【发布时间】:2011-11-20 01:07:03
【问题描述】:

我想过滤一个 linq 查询

我有 2 个 linq 语句

第一个获取我想要的所有商店,第二个是我根据第一个查询中找到的结果过滤信息的地方。

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 的结果?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    像这样:

    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

    【讨论】:

    • 你也可以写更短的stores.Any(s => s.StoreID == a.StoreID),而不是stores.Select(s => s.StoreID).Contains(a.StoreID)。我相信无论哪种方式,对 SQL 的翻译都是一样的。
    • 谢谢大卫。在尝试包含之前,我错过了 stores.Select(s=>s.StoreId)。
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多