Linq查询本地集合对数据库

时间:2015-10-23 09:46:38

标签: c# sql linq

我正在查询我的本地列表与数据库,并想知道最好的方法是什么。

目前我正在将我的数据库加载到本地List

中“options”的内存中
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);
}

有没有办法可以创建临时表来保存“选项”并查询它?

或者我完全错过了其他一些方法吗?

1 个答案:

答案 0 :(得分:1)

因为您正在使用“包含”,所以很难,并且您可能使用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));
}

(“谓词”构建器页面上的第一个示例显示了一个类似的示例)