Welcome

首页 / 软件开发 / .NET编程技术 / Queries with local collections are not supported

Queries with local collections are not supported2012-02-11 博客园 飞得更高一、事件

最近做一项目,要求实现如下查询:

有三个表:论文(Paper),期刊(Magazine),期刊学科分类(MagazineSubjectClass),三者关系为:论文和期刊的关系为一对多(一篇论文对应一个期刊,一个期刊对应多篇论文),期刊和期刊分类的关系是一对多(一个期刊对应多个分类),如图:

要求实现的查询如下:

给出一“学科分类”集合(字符串数组),查询发表在“学科分类”属于这个集合中的杂志上的论文。

二、响应事件

我的思路如下:

根据学科分类找出符合条件的杂志

根据杂志找出符合条件的论文

于是,我写下如下linq语句:

IQueryable<Magazine> magazines = database.Magazines.AsQueryable();
if (paperQueryInformation.MagazineQueryInformation.SubjectClass != null && paperQueryInformation.MagazineQueryInformation.SubjectClass.Length != 0)
{
magazines = database.MagazineSubjectClasses
.Where(q => paperQueryInformation.MagazineQueryInformation.SubjectClass.Contains(q.SubjectClass))
.Select(q => q.Magazine)
.Distinct();
query = query
.Where(q => magazines.Contains(q.Magazine));
}