这就是设置:
规则模型
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);
我似乎无法将其锁定。如果有人可以解释我在做什么错,那将是很大的帮助。
谢谢
答案 0 :(得分:2)
如果OptionList是选项列表,则包含将不适用于选项代码。 如果它们是相同的引用或正确实现的值类型,则可以这样做:
!OptionList.Contains(option)
或者如果不是这样的话
!OptionList.Any(opt => opt.OptionCode == option.OptionCode)
您的第一个查询是错误的,您可以将其更改为此...
where !rule.MustNotContainAllOptions.Any(option => OptionList
或使用您的第二个查询,这是正确的