【问题标题】:Get list of entities whose fk related entity does not contain id in list of ids获取 id 列表中 fk 相关实体不包含 id 的实体列表
【发布时间】:2015-10-05 15:50:25
【问题描述】:

我有两张表 - 产品和 SKU,一对多相关。

我有第三个表,rental,其中包含已租用的 sku id。

产品有许多相关的 SKU - 例如,产品 1 可能有 sku 1、2 和 3。

客户按 SKU 租用产品。所以 SKU 1 可能没有库存,但库存中还有 2 个 SKU,这意味着该产品仍然有货。

如果所有 3 个 SKU 都已租用(在租用表中),则该产品不可用。

我需要查询库存中剩余 SKU 的产品的上下文。

我试图通过获取产品列表、不可用 SKU 列表并返回 SKU 不在不可用 SKU 列表中的那些产品来做到这一点。

我有一个 iQueryable 的产品...

IQueryable<products> p = (from r in db.products from pc in r.productcategories 
where pc.categories.categoryname == n select r)
.OrderByDescending(s => s.productname).Take(18);

以及不可用的 skus 列表...

List<int> rentedskus = new List<int>();
rental = rental.Where(t => sd < t.enddate && t.startdate < ed);

foreach (var r in rental)
{
    rentedskus.Add(r.skuid);
}

这里有些马虎,但我从产品列表中获得了产品 sku 的列表...

List<products> plist = p.ToList();
List<int> productskus = new List<int>();
foreach(var pr in plist)
{
    foreach(var sk in pr.sku)
    {
        productskus.Add(sk.skuid);
    }
}

现在,假设这是实现目标的可接受方式,我只需要选择相关 SKU 不在rentedskus 中的那些产品。我尝试了几种不同的...

var productlistresult = productskus.Except(rentedskus).ToList();
p = p.Where(i => i.productlistresult.Contains(product.skus(n => n.skuid));

【问题讨论】:

    标签: c# asp.net-mvc entity-framework linq


    【解决方案1】:

    您的上一个示例代码几乎就在那里,您只是有一些逻辑错误。这就是你需要的:

    p = p.Where(i => productlistresult.Contains(i.skuid));
    

    此外,您还可以使用Select 大量清理您的代码。例如,无需创建列表、查询租用的 sku、然后遍历 sku 并将它们添加到列表中,只需执行以下操作:

    var rentedskus = rental.Where(t => sd < t.enddate && t.startdate < ed).Select(t => t.skuid);
    

    【讨论】:

    • 谢谢克里斯。产品表没有 skuid。我只能通过sku表得到skuid...
    • 好的,那你就做i.skus.Any(s =&gt; productlistresult.Contains(s.skuid))这样的事情。
    • 完美 - 谢谢。 p = p.Where(i => i.sku.Any(s => productlistresult.Contains(s.skuid)));
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多