簡體   English   中英

Linq OR運算符?

[英]Linq OR Operator?

我有從Animal派生的Dogs and Cats類。 我想找到第一個黑色的動物。 我目前正在這樣做,如下所示:

Animal blackAnimal = dogs.FirstOrDefault(d => d.Color == "Black");
if (blackAnimal == null)
{
    blackAnimal = cats.FirstOrDefault(c => c.Color == "Black");
}

我希望能夠在同一條語句中做到這一點-例如找到第一只黑狗,但如果沒有黑色的狗,則找到第一只黑色的貓。

注意Color屬性不是來自Animal ,而是來自DogCat獨立屬性。

使用Concat

dogs
    .Cast<Animal>()
    .Concat(cats)
    .FirstOrDefault(d => d.Color == "Black");

它將枚舉第一個之后的第二個集合。


由於您要搜索其他屬性,因此您可以

var result = dogs.FirstOrDefault(x => x.Color1 == "Black") as Animal ??
             cats.FirstOrDefault(x => x.Color2 == "Black");

Diego Torres的回答是完美的,但是我將提供另一種解決方法,在他的解決方案不起作用的情況下可以適用:

Animal blackAnimal = (Animal)dogs.FirstOrDefault(d => d.Color == "Black") ?? cats.FirstOrDefault(c => c.Color == "Black");

如果集合不是基本類型,則需要全部.Cast

鑒於Color不是Animal的屬性,您將必須執行以下操作:

var animal = dogs
    // check for dogs
    .Where(d => d.Color == "Black").Cast<Animal>()
    // check for cats
    .Concat(cats.Where(c => c.Color == "Black").Cast<Animal>())
    // get the first
    .FirstOrDefault();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM