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