4

我有一个本地值列表,我需要实体框架对数据库进行检查并返回它们。

如果该列表已经在数据库中,则以下内容将起作用:

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 将本地列表与数据库列表进行匹配呢?

4

1 回答 1

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));
于 2012-09-12T18:53:54.427 回答