如何处理空的linq查询

本文关键字:linq 查询 处理 何处理 | 更新日期: 2023-09-27 18:23:49

我相信有一种更好的写作方式。下面是一些关于如何最好地进行的建议

本质上,我不能保证一个项目列表包含我想要的特定项目,并试图返回基于该项目的值。

class item
{
string Brand;
string Product;
decimal Value;
}
//List is created and filled elsewhere
List<item> _items;
void DoStuff()
{
decimal desiredValue = 0;
   try
     {
    var XXX = _items
             .Where(x=>x.Brand == "brand1")
             .Where(x=>x.Product == "product1")
             .First();
    desiredValue = XXX.Value;
     }
    catch()
     { 
     //Empty Catch Bugs me
     }
//Do something with desiredValue
   }
}

如何处理空的linq查询

我会使用:

decimal? result = _items.Where(x => x.Brand == "brand1")
                        .Where(x => x.Product == "product1")
                        .Select(x => (decimal?) x.Value)
                        .FirstOrDefault();

注意,这里的Select子句获取的是不可为null的小数,但显式地将其转换为decimal?,这样您就可以区分"有一个结果,但它是0"answers"没有任何结果":

if (result == null)
{
    // No results
}
else
{
    decimal realResult = result.Value;
    // whatever...
}

或者,您可以使用:

Item result = _items.FirstOrDefault(x => x.Brand == "brand1" && 
                                         x.Product == "product1");
if (result == null)
{
    // No results
}
else
{
    decimal value = result.Value;
    // Proceed...
}

使用FirstOrDefault()而不是First(),它将返回null,然后您可以检查它。

var result= _items.Where(x=>x.Brand = "brand1" && x.Product="product1").FirstOrDefault()
if (result!=null)
{
    // get the first
    var firstItem = result.value;
}