LINQ Query с синтаксисом метода - PullRequest
0 голосов
/ 30 апреля 2020

Мое требование - указывать логическое значение (IsPC = true) только в том случае, если я нашел какое-либо значение с IsCurrent = true из списка, и второе условие - это фильтрация списка по кодам G или W, а третье условие - проверка длины PCBNumber. == 15 только с одним из списка.

Как быстро я могу сократить приведенный ниже запрос, используя приведенный ниже синтаксис метода LINQ, мой запрос

     var CurrentQ= p.List.Where(x => x.IsConCurrent== true);
            if (CurrentQ.Count() > 0)
            {
                var NCurrentQwithWorQ = p.List.Where(x => x.Codes == Codes.W|| x.Codes== Codes.Q).Count();
                if (NCurrentQwithWorQ  != null)
                {
                    var PCBNumber = p.List.Where(x => x.PCBNumber .Length == 15).Count();
                    if (PCBNumber == 1)
                    {
                        isPC = true;
                    }
                }
}

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

Я не пытаюсь отладить то, что вы написали, но разве это не то, что вы ищете, то есть последовательное соединение условий «Где»?

var isPC = p.List.Where(x => x.IsConCurrent == true).Where(x => x.Codes == Codes.W || x.Codes == Codes.Q).Where(x => x.PCBNumber.Length == 15).Count() == 1;

0 голосов
/ 30 апреля 2020

Оба решения, предложенные выше, верны.

p.List.Where(x => x.IsConCurrent== true && (x.Codes == Codes.W|| x.Codes== Codes.Q) && x.PCBNumber.Length == 15);
p.List.Where(x => x.IsConCurrent == true).Where(x => x.Codes == Codes.W || x.Codes == Codes.Q).Where(x => x.PCBNumber.Length == 15).Count()

На самом деле они выполняются одинаково. Функция Where не вызывает немедленную итерацию по источнику данных. Только когда вы выполняете функцию Count, LINQ будет обрабатывать строку за строкой и выполнять критерий за критерием, чтобы выяснить, какие значения следует рассчитать.

Я могу только предложить добавить оператор Take (2) после предложения where. В этом случае LINQ остановится после нахождения первых двух строк, соответствующих предоставленному критерию, а остальные строки не будут обработаны.

p.List.Where(x => x.IsConCurrent == true)
   .Where(x => x.Codes == Codes.W || x.Codes == Codes.Q)
   .Where(x => x.PCBNumber.Length == 15)
   .Take(2).Count()
0 голосов
/ 30 апреля 2020

Вы можете использовать все условия в одном запросе, как показано ниже,

var PCBNumber= p.List.Where(x => x.IsConCurrent== true && (x.Codes == Codes.W|| x.Codes== Codes.Q) && x.PCBNumber.Length == 15);
if (PCBNumber !=null && PCBNumber.Count() == 1)
{
   isPC = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...