我有4个不相关的实体,我想查询它们是否有某个关键字。每个实体都有一个LastModified字段,我想通过LastModified字段返回搜索的前50个结果。这甚至可能吗?
过去我曾用过一个视图来做这种事情......但我不明白如何用 EF Code First 来实现它。
答案 0 :(得分:7)
您需要:
前两个可以使用LINQ to Entities完成,后三个可以使用LINQ to Objects。
编辑此方法类似于:
var resA = from a in db.A
where ConditionA(a)
select MakeSharedFromA(a);
var resB = from b in db.B
where ConditionB(b)
select MakeSharedFromB(b);
var resC = from c in db.C
where ConditionC(c)
select MakeSharedFromC(c);
var resD = from d in db.D
where ConditionD(d)
select MakeSharedFromD(d);
var merged = resA.AsEnumerable().Take(50)
.Concat(resB.AsEnumerable().Take(50))
.Concat(resC.AsEnumerable().Take(50))
.Concat(resD.AsEnumerable().Take(50));
var res = merged.Sort(x => x.SortField).Take(50);
如果每个MakeSharedFromX
方法都可以被lambda(给出表达式树)替换,该lambda仅限于LINQ to Entities支持的运算符和函数,那么删除AsEnumerable
和{{ 1}}来自串联步骤的调用,所有都可以在服务器端执行。