使用EF

时间:2015-12-01 14:31:39

标签: c# entity-framework linq linq-to-sql

如果我有一些我需要的对象的摘要类(例如它的主键等等)有没有办法在我写一个连接到其他表时使用该类对象的列表?所以我LINQ查询中的所有内容都是真实的表格,如this.Context.MyTable,但其中一个是我的List<MyClass>? 或者是否有任何与LINQ相关的Nuget项目可以实现这一目标?

1 个答案:

答案 0 :(得分:2)

EF LINQ查询实际上不是在C#中运行的代码,它们被转换为SQL并在数据库服务器上运行;所以你不能用内存数组(或List<T>)加入它们。您可以做的是使用Contains,如下所示:

public IEnumerable<Table1> GetThingsFromDatabse(DataContext db, IList<MyObject> objects)
{
    var ids = objects.Select(x => x.Id).ToList();
    var results = Enumerable.ToList(
        from x in db.Table1s
        where ids.Contains(x.Id)
        select x
    );

    return results;
}

这会被翻译成如下所示的SQL:

SELECT *
FROM [Table1] x
WHERE x.Id IN (@Id1, @Id2, ...)