实体框架DbContext在查询中的位置

时间:2014-08-21 15:57:30

标签: c# sql entity-framework

我正在尝试查询实体/表并确定是否存在与项目列表匹配的记录。

换句话说,我有一个名字数组,我想建立我的查询来做类似的事情:

string[] fileList = {"Clients", "Jobs", "People"};
ICollection<DocumentsView> documentList = await _dataContext.FindAllAsync<DocumentsView>(fileList.Containts(a.name)));

以上显然不起作用,但是有一些方法可以做到吗? 我现在正在做这个,它正在工作,但必须有一个更好的方法......如果我想扩展要比较的项目列表怎么办?等

ICollection<DocumentsView> documentList = await _dataContext.FindAllAsync<DocumentsView>(a=>a.name == "Clients" && a.name == "Jobs" && a.name == "People");

这是DbContext查询的FindAllAsync方法:

public async Task<ICollection<T>> FindAllAsync<T>(Expression<Func<T, bool>> match) where T : class
{
    return await _context.Set<T>().Where(match).ToListAsync();
}

1 个答案:

答案 0 :(得分:1)

Contains调用应该可以正常工作,实体框架会在生成SQL查询时将其转换为IN ()子句。

但是,当您尝试拨打a =>时,您的代码会丢失Contains

await _dataContext.FindAllAsync<DocumentsView>(a => fileList.Contains(a.name)));