我可以在LINQ语句中组合空检查吗?

时间:2016-06-05 08:04:17

标签: c#

是否有机会将这两个语句组合在一起,仍然将wordForm作为我方法中声明的变量供以后使用?

WordForm wordForm = db.WordForms
    .Where(w => w.Definition == result.definition)
    .FirstOrDefault();

if (wordForm == null)
{
    wordForm = addWordForm(result, word);
}

3 个答案:

答案 0 :(得分:7)

使用??运算符:

WordForm wordForm = db.WordForms
    .Where(w => w.Definition == result.definition)
    .FirstOrDefault() ?? addWordForm(result, word);

答案 1 :(得分:1)

您可以合并WhereFirstOrDefault,因为FirstOrDefault允许您指定谓词。这将节省您通过整个列表只采取第一个,如果它在那里。然后使用空合并运算符??,如果左侧为空,则仅评估右侧:

WordForm wordForm = db.WordForms
.FirstOrDefault(w => w.Definition == result.definition) ?? addWordForm(result, word);

答案 2 :(得分:0)

编辑:没关系,错过了OP说他需要声明wordForm变量的部分!

您可以将该查询简化为:

if (WordForms.Any(w => w.Definition != result.definition))
{
    Console.WriteLine("Not found");
}

我还要确保“结果”首先不为空。