惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
C
Cybersecurity and Infrastructure Security Agency CISA
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Securelist
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
博客园 - 三生石上(FineUI控件)
T
Threatpost
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
IT之家
IT之家
P
Palo Alto Networks Blog
Microsoft Azure Blog
Microsoft Azure Blog
Spread Privacy
Spread Privacy
Cyberwarzone
Cyberwarzone
腾讯CDC
L
LangChain Blog
Know Your Adversary
Know Your Adversary
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
T
Tor Project blog
AWS News Blog
AWS News Blog
T
Tenable Blog
NISL@THU
NISL@THU
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
MyScale Blog
MyScale Blog
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
量子位
美团技术团队
The Cloudflare Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog

博客园 - 飞得更高

MPI并行编程系列之五:图的单源最短路径算法 MPI并行编程系列之四:KMP算法及并行化 MPI并行编程系列三:并行正则采样排序PSRS MPI并行编程系列 MPI并行编程系列二:快速排序 MPI并行编程系列一:枚举排序 c#基础(一)之内存管理 用Windows Live Writer 首发Blog 一个被我长期忽略的一个问题:验证控件与Button的OnClientClick事件 远程数据自动导入的设计与实现 linq下数据库接口的定义和实现(linq to SQL) sql 常用函数总结 面对恶意操作,勇敢说不------定制服务器端验证器 验证控件失效,求助解决方案 js浮点运算bug的解决办法 从页面的生命周期事件到页面基类(PageBase类)的编写 c# 委托实例 回车与服务器控件Button的Click事件 javascript:Web页面中的所有控件清空 - 飞得更高 - 博客园
LINQ TO SQL 复杂查询之Queries with local collections are not supported
飞得更高 · 2008-12-03 · via 博客园 - 飞得更高

    我在发这篇文章的时候,就有些犹豫:到底发不发在首页。linq的复杂查询是一个非常让人头痛的问题,我非常希望能够和园子里的高手交流下,怕发布在别的地方,这篇帖子很快就沉下去了,因此就放在首页吧,欢迎各位高手莅临指导。^_^

一、事件

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

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

 

    要求实现的查询如下:

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

二、响应事件

    我的思路如下:

  1.  根据学科分类找出符合条件的杂志
  2.  根据杂志找出符合条件的论文 

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

Code

    运行,发生如下错如:

    Queries with local collections are not supported

    为什么出现这个错误呢?原来是linq的延迟执行导致了这个错误,知道了原因,我改进如下:

Code

     运行,就错误没有了,可是出现了新的错误,如下:

   Method 'Boolean Contains(Srims.Business.Papers.Magazine)' has no supported translation to SQL

    解决这个错误的方法就是将将类型转换为泛型 IEnumerable,使用 AsEnumerable<TSource> 可返回类型化为泛型 IEnumerable 的参数。LINQ to SQL(使用默认泛型 Query)会尝试将查询转换为 SQL 并在服务器上执行。但在有写情况下,此方法无法转换为 SQL。解决方法是用泛型 IEnumerable<T> 实现以替换泛型 IQueryable<T>。可通过调用 AsEnumerable<TSource>运算符来执行此操作。

我改进查询语句如下: 

Code

     运行,结果正确,问题解决。

 三、后记

     经过不断的努力,问题终于解决了。在LINQ TO SQL的复杂查询中,linq的延迟执行和经linq语句翻译成sql语句的过程中,会发生很错想不到的错误,这是我碰到的最多的一个,今天终于解决了,拿出来和大家分享下,希望能抛砖引玉。^_^