c# - 确定 ICollection 中的所有项目是否不包含在列表中使用 Linq 查询
问题描述
所以这是设置:
规则模型
public class Rule
{
public int RuleId { get; set; }
public BillOfMaterial BillOfMaterial { get; set; }
public ICollection<Option> MustNotContainAllOptions { get; set; }
}
期权模型
public class Option
{
public int OptionId { get; set; }
public string OptionCode { get; set; }
public ICollection<Rule> MustNotContainAllRules { get; set; }
}
我正在尝试从给定的基础和选项列表中查询其物料清单的规则。此时唯一的条件是规则不能包含任何给定的选项列表。
示例输入
输入选项:PA、PB
示例规则
规则:MustNotContainOptions = PA,物料清单 = BOM1
在这种情况下,查询不应返回任何内容,因为输入具有选项 PA
我试过的
OptionList = 选项的输入列表
var MustNotContainAnyQuery = (from rule in db.Rules
where rule.MustNotContainAllOptions.Any(option => !OptionList.Contains(option.OptionCode))
select rule.BillOfMaterial.BomNumber);
和
var MustNotContainAnyQuery = (from rule in db.Rules
where rule.MustNotContainAllOptions.All(option => !OptionList.Contains(option.OptionCode))
select rule.BillOfMaterial.BomNumber);
我似乎无法锁定它。如果有人可以解释我做错了什么,那将是一个很大的帮助。
谢谢
解决方案
如果 OptionList 是选项列表,则 contains 不适用于选项代码。如果它们是相同的引用或正确实现的值类型,您可以这样做:
!OptionList.Contains(option)
或者如果不是这样:
!OptionList.Any(opt => opt.OptionCode == option.OptionCode)
您的第一个查询是错误的,您可以将其更改为...
where !rule.MustNotContainAllOptions.Any(option => OptionList
或使用您的第二个查询,这是正确的
推荐阅读
- docker - 具有桥接网络的 Docker 容器无法 ping 任何东西(即使是默认网关)
- python - 使用 win32com 回复电子邮件
- flutter - 如何在 Flutter 中使用内置系统日历 App?
- python-3.x - 我收到 TypeError: string indices must be integers in Titanic dataset 。任何人都可以提出一些解决方案吗?它在使用 apply() 或 map() 时发生
- sql - 从包含所有子集的类别和产品表中复制数据
- qliksense - 如何从 Qlik Sense JSON-RPC API 过滤和提取数据
- python - python -X showrefcount 报告扩展的负引用计数
- windows - 为什么 Cygwin 的软件开发程序没有看到必要的 dll,而是看到其他所有 dll?
- sql - 使用 order by 时如何保持第一行
- java - 项目构建一个 JAR;我想让该 JAR 位于 ~/.m2/repository 中,以便我可以从其他项目中使用它;这是怎么做的?