如何使用LINQ从选择中返回一行?

时间:2016-05-27 07:59:58

标签: c# linq

我有这段代码:

var wordForms = await db.WordForms
   .Where(w => w.Text == word)
   .AsNoTracking()
   .ToListAsync();

它返回一个列表,但只有一个条目,因为Text是唯一的。我怎样才能让它只检索一个单词?

4 个答案:

答案 0 :(得分:4)

如果我理解正确,您想立即返回单个元素。我是这样做的:

//When there is multiple entries expected but I only need the first
var wordForms = await db.WordForms
               .FirstOrDefaultAsync(w => w.Text == word);

//When I am sure only one entry exist
var wordForms = await db.WordForms
           .SingleOrDefaultAsync(w => w.Text == word);

如果您不需要等待,可以使用默认的扩展方法而无需等待。

对于Async SingleOrDefault和Async FirstOrDefault,您必须包含实体框架6.

Why is there no SingleOrDefaultAsync for IQueryables?

https://msdn.microsoft.com/en-us/library/dn220208(v=vs.113).aspx

答案 1 :(得分:3)

使用FirstOrDefaultAsync作为最终的LINQ方法:

 var wordForms = await db.WordForms
                         .AsNoTracking()
                         .FirstOrDefaultAsync(w => w.Text == word)

答案 2 :(得分:2)

我认为你的终端操作需要是FirstAsync,FirstOrDefaultAsync,SingleAsync或SingleOrDefaultAsync中的任何一个。

我还没有检查过,但我认为所有这些变种都存在。

答案 3 :(得分:-3)

所以你只想要WordForms中有Text == word的第一个值?

var wordForms = (from c in db.WordForms
                where c.Text==word
                select c).FirstOrDefault()