我有一个本地值列表,我需要对数据库进行实体框架检查并返回它们。
如果列表已在数据库中,则以下内容可行:
var list = /* some ef query */;
var myList = context.Logs.Where(l => list.Any(li => l.LogNumber == li.LogNumber));
但如果列表是本地的,则会引发错误:
var list = new List<Log>();
var myList = context.Logs.Where(l => list.Any(li => l.LogNumber == li.LogNumber));
例外:Unable to process the type 'Data.Log[]', because it has no known mapping to the value layer.
那么如何使用EF将本地列表与数据库列表进行匹配?
答案 0 :(得分:4)
我在代码示例中遇到了与您不同的错误,但我相信这是同样的想法。 EF不知道如何将List<Log>
转换为SQL存储表达式。当您仍在查询中时它仍然有效,因为它还没有被序列化。
我意识到这不太理想,但我能够通过提取LogNumber的标量值然后在查询中使用它来使这个查询工作。
var list = new List<Log>();
list.Add(new Log()
{
LogNumber = 1
});
var numbers = list.Select(l => l.LogNumber);
var myList = m.Logs.Where(l => numbers.Contains(l.LogNumber));