实体框架检查本地列表

时间:2012-09-12 17:24:08

标签: entity-framework entity-framework-5

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

如果列表已在数据库中,则以下内容可行:

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

1 个答案:

答案 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));