在使用EF联接到数据库表中使用类

本文关键字:数据库 EF | 更新日期: 2023-09-27 18:25:22

如果我有一个包含我需要的一些对象的摘要类(例如它的主键等)。当我编写与其他表的联接时,有没有办法使用该类对象的列表?所以我的LINQ查询中的所有东西都是像this.Context.MyTable一样的真实表,但其中一个是我的List<MyClass>?或者有没有任何与LINQ相关的Nuget项目使这成为可能?

在使用EF联接到数据库表中使用类

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, ...)