C# 如何使用LINQ仅从选择返回一行?
我有以下代码:C# 如何使用LINQ仅从选择返回一行?,c#,linq,C#,Linq,我有以下代码: var wordForms = await db.WordForms .Where(w => w.Text == word) .AsNoTracking() .ToListAsync(); 它返回一个列表,但只有一个条目,因为文本是唯一的。我怎样才能使它仅检索一个单词?如果我理解正确,您希望立即返回单个元素。我通过以下方式做到这一点: //When there is multiple entries expected but I only need th
var wordForms = await db.WordForms
.Where(w => w.Text == word)
.AsNoTracking()
.ToListAsync();
它返回一个列表,但只有一个条目,因为文本是唯一的。我怎样才能使它仅检索一个单词?如果我理解正确,您希望立即返回单个元素。我通过以下方式做到这一点:
//When there is multiple entries expected but I only need the first
var wordForms = await db.WordForms
.FirstOrDefaultAsync(w => w.Text == word);
或
如果您不需要等待,您可以使用默认的扩展方法而不需要等待
对于Async SingleOrDefault和Async FirstOrDefault,必须包含实体框架6
那么您只需要从Text==word的WordForms中获取第一个值
var wordForms = (from c in db.WordForms
where c.Text==word
select c).FirstOrDefault()
我可以想象,您的终端操作需要是FirstAsync、FirstOrDefaultAsync、SingleAsync或SingleOrDefaultAsync中的任意一种 我还没有检查,但我假设所有这些变体都存在。使用作为最终LINQ方法:
var wordForms = await db.WordForms
.AsNoTracking()
.FirstOrDefaultAsync(w => w.Text == word)
您能否修改ToListSync以获得必要的结果?如果不起作用,您只能等待一项任务,而不能等待任何其他值编辑以包含异步方法,其中的异步等待需要作为ToListSync的一种形式实现,已经使用过
var wordForms = await db.WordForms
.AsNoTracking()
.FirstOrDefaultAsync(w => w.Text == word)