[英]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
,而是來自Dog
和Cat
獨立屬性。
使用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.