LINQ, где условие условия, если - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть класс, содержащий следующие свойства:

public class Suborder
{
     public List<OrderLineItem> OrderLineItemList { get; set; }
     public string ProviderCode { get; set; }
}


public class OrderLineItem
{
    public List<OrderLineItem> BundleComponentList { get; set; }
    public string Product { get; set; }
}

Я хочу пройти через BundleComponentList, чтобы проверить, имеет ли какой-либо его элемент значение Product, равное Shoes.Я пытался так, но получаю ошибку

if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || suborder.OrderLineItemList.Where(x=>x.BundleComponentList.Any(y=>y.Product == "Shoes")))

Оператор '||'не может применяться к операндам типа 'bool' и 'System.Collections.Generic.IEnumerable

Что не так с моим LINQ?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Where() не возвращает логическое значение, а IEnumerable, поэтому его нельзя использовать в предложении if.Вы должны использовать Any() в вашем случае.

if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || 
    suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))

Обратите также внимание, что в приведенном выше предложении if предполагается, что подзадача никогда не равна нулю.

0 голосов
/ 12 декабря 2018

Я бы совместил лямбду с LINQ для этого.Намного легче читать и видеть, что происходит:

var orders = from o in suborder.OrderLineItemList
             where
               o.Product == "Shoes" ||
               o.BundleComponentList.Any(c => c.Product == "Shoes")
             select o;

bool isShoesOrder = orders.Any();
0 голосов
/ 12 декабря 2018

Используйте Any вместо Where, так как Where возвращает последовательность, а не bool.

suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))
...