Linq根据数据库查询本地集合
本文关键字:集合 查询 数据库 Linq | 更新日期: 2023-09-27 18:18:53
我正在对数据库查询我的本地列表,想知道最好的方法是什么。
目前我正在加载我的数据库到内存,其中"选项"在本地列表
tmp.AddRange(from course in cs.studhists.Where(x => x.year == year).AsEnumerable()
from option in options.Where(x => x.type.Equals("course"))
join stud in cs.sstudents on course.studid equals stud.studid
where
course.csid.Contains(option.identifier) && course.crsinst.Contains(option.extra_identifier)
select stud);
"studhists"表有相当多的行,如果我没有选择只选择当前年份的选项,或者如果年份在选项对象内,它将需要一段时间加载到内存。
或者我可以循环遍历每个选项(这在我发现只加载当前年份的数据之前工作得快得多)。我没有计时,但我想它仍然在。
foreach (OptionListItem opt in options.Where(x => x.type.Equals("course")))
{
tmp.AddRange(from course in cs.studhists
join stud in cs.sstudents on course.studid equals stud.studid
where course.year == year
&& course.csid.Contains(opt.identifier) && course.crsinst.Contains(opt.extra_identifier)
select stud);
}
是否有一种方法可以创建临时表来保存"选项"并查询它?
或者我完全错过了一些其他的方法来做到这一点?
因为您使用的是"Contains",所以很难,而且您可能需要使用PredicateBuilder:
动态构建查询。var predicate = PredicateBuilder.False<Course>();
foreach(var opt in options.Where(x => x.type.Equals("course"))
{
predicate = predicate.Or(course.csid.Contains(opt.identifier) && course.crsinst.Contains(opt.extra_identifier));
}
(谓词构建器页面上的第一个示例显示了一个类似的示例)