Определите, все ли элементы в коллекции ICollection <T>не содержатся в списке <T>, используя запрос Linq - PullRequest
0 голосов
/ 03 октября 2018

так что это настройка:

Модель правила

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; }
}

Iя пытаюсь запросить правило для своего списка материалов из заданной базы и списка вариантов.Единственное условие на данный момент - это то, что правило не может содержать ни один из заданных списков параметров.

Пример ввода

Параметры ввода: PA, PB

Пример Rule

Rule: 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);

Я могу 'Кажется, это заблокировано.Если бы кто-то мог объяснить, что я делаю неправильно, это было бы очень полезно.

Спасибо

1 Ответ

0 голосов
/ 03 октября 2018

Если OptionList представляет собой список опций, содержит не будет работать с кодом опции.Вы можете сделать это, если это одна и та же ссылка или правильно реализованные типы значений:

!OptionList.Contains(option)

или, если нет:

!OptionList.Any(opt => opt.OptionCode == option.OptionCode)

Ваш первый запрос неверен, вы можете изменить его на этот...

where !rule.MustNotContainAllOptions.Any(option => OptionList

или используйте ваш второй запрос, который является правильным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...