是的,你可能会想; "上帝,另一个?"
是的,另一个.
"你调用的对象是空的."
我最近一直在使用EF6,经过一段时间的开发,我发现需要更多的优化.Alot已经重新设计没有问题,但似乎我无法弄清楚这个.
在我的应用程序中,我一直在使用这段伪代码从数据库中获取项目.
DbContext context = new DbContext();
public IEnumerable<string> GetExistingNames(IEnumerable<string> names)
{
foreach(string name in names)
{
string existingName = context.Names.Where(n => n.Name == name).FirstOrDefault();
if(existingName == null) continue;
yield return existingName;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这DbContext只是为了澄清.它在需要时被处理掉.
这种方法"有效",但这意味着,如果我有20个名字要查找,我会打到数据库大约20次.哎哟!
因此,我开始寻找实现单个查询的方法.我找到了一种方法,但它并没有真正发挥作用.这是我目前的做法;
public IEnumerable<string> GetExistingNames(ICollection<string> names)
{
IQueryable<Names> query = context.Names.Where(n => names.Contains(n.Name));
if(query == null) yield break;
foreach(var name in query)
{
yield return name.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这应该转化为SELECT ... FROM Names WHERE ... IN (...).但是,我的应用程序一foreach(var …