我有这段代码:
var wordForms = await db.WordForms
.Where(w => w.Text == word)
.AsNoTracking()
.ToListAsync();
它返回一个列表,但只有一个条目,因为Text是唯一的。我怎样才能让它只检索一个单词?
答案 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()