【问题标题】:Linq Collection instersection List/ArrayLinq 集合交集列表/数组
【发布时间】:2016-10-12 22:31:21
【问题描述】:

考虑以下列表:

List<long> listOfIDs = new List<long> { 1, 2, 3, 4 };

[(产品)1 个菠萝 -(供应商)Fruit Inc / Marketplace Inc]>

[2 草莓 - 水果公司]>

[3 Coke - Super Drinks Inc / Marketplace Inc]>

[4 橙汁 - Super Drinks Inc]

db.Table.Where(a => a.SubTable.All(b => listOfIds.Contains(b.SubTableId)))

虽然我选择了产品 1 和 2,但我应该只选择 Fruit Inc 作为供应商。当我将可口可乐添加到我的列表中时,我不想再看到任何供应商,因为没有供应商同时代表这 3 种产品。

预期输出场景:

选定产品:1、2 预期结果:水果公司

1, 3 市场公司

1、2、3 空。

1、3、4 空。

3、4 超级饮料公司

【问题讨论】:

  • 您的查询结果是什么?
  • 数据库表没有子表。你是说表格字段吗?
  • @Slai 只是将它们视为集合。这只是澄清我需要达到的目标的一个示例。
  • @octavioccl 想象这种情况[供应商A有产品1和2][供应商B有产品3][供应商C有产品2 & 3] 预期结果是 供应商 A 和 C,因为它们只是产品 2 相互的。
  • 是的,但是 B 和 C 也有 3 个相互,抱歉,我还没明白你想在这里实现什么

标签: entity-framework linq list linq-to-entities


【解决方案1】:
// change All to Select if you want list of each bool
     db.Table.All(a => listOfIds.Contains(a.SubTableId));

如果您想检查数据库中是否存在 listOfIds,这应该可以解决问题,因为您提到了 ContainsAll。

如果您想使用 listOfIds 从 db 中获取实体,那么应该这样做。

 db.Table.Where(a => listOfIds.Contains(a.SubTableId)).ToList;

【讨论】:

  • 执行此操作时出现错误提示“bool 不包含 Select 的定义”。我可能没有表达得那么清楚...想象一下场景 [SupplierA 有产品 1 和 2][SupplierB 有产品 3][SupplierC 有产品2 & 3] 预期结果是供应商 A 和 C,因为它们只是产品 2 相互的。
  • 你能分享你的模型吗?
  • public class Product { public long Id { get; set; } public string Name { get; set; } public ICollection&lt;Supplier&gt; Suppliers { get; set; } } public class Supplier { public long Id { get; set; } public string Name { get; set; } public ICollection&lt;Product&gt; Products { get; set; } }
猜你喜欢
  • 1970-01-01
  • 2022-11-22
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多