如何处理空的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
}
}
我会使用:
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;
}