如何处理空linq查询

Rou*_*ace 2 c# linq

我确信有一个更好的方式来写下面的内容会喜欢关于如何最好地解决它的一些指示

基本上我不能保证项目列表包含我之后和尝试根据所述项目返回值的特定项目.

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
   }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

我会用:

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

请注意,这里的Select子句是获取一个非可空小数的东西,但是明确地将其转换为decimal?以便您可以区分"有结果,但它是0"和"没有任何结果"之间的区别:

if (result == null)
{
    // No results
}
else
{
    decimal realResult = result.Value;
    // whatever...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

Item result = _items.FirstOrDefault(x => x.Brand == "brand1" && 
                                         x.Product == "product1");

if (result == null)
{
    // No results
}
else
{
    decimal value = result.Value;
    // Proceed...
}
Run Code Online (Sandbox Code Playgroud)