EF代码优先:如何在多个表/实体上进行搜索
本文关键字:实体 搜索 代码 EF | 更新日期: 2023-09-27 18:12:48
我有4个不相关的实体,我想在它们中查询某个关键字。每个实体都有一个LastModified字段,我想按LastModified域的顺序返回4个表中搜索的前50个结果。这可能吗?
过去我用一个视图来做这种事情。。。但我不知道如何使用EF Code First来实现它
您需要:
- 搜索每个表
- 将结果转换为通用类型
- 合并结果
- 从此合并列表中排序/选择
- 取前50个结果
前两个可以使用LINQ to Entity完成,后三个可以使用LINQ to Objects完成。
EDIT这种方法看起来像:
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
和Take
调用,所有调用都可以在服务器端执行。