Entity Framewor 学习笔记 (include + where)
如果我们想在子查询做过滤的话应该怎样写呢?
IEnumerable<Product> products = db.products.Include(p => p.colors.Where(c => c.id == )).ToList();
product - color , 1-n
可能你以为是这样,但是结果是 error : "The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties."
正确的做法是使用一个匿名对象来包装
var products = db.products.Include(p => p.colors).Select(p => new
{
id = p.id,
colors = p.colors.Where(c => c.id == )
//还有其它属性
}).ToList();
这个方法虽然可以但是缺点很多,比如要写一堆属性=value, 而且出来是IEnumerable<匿名对象> 而不是 IEnumerable<Product>
所以呢我们应该要这样来写
IEnumerable<Product> products = db.products.Include(p => p.colors).Select(p => new
{
Product = p,
colors = p.colors.Where(c => c.id == )
//不需要其它属性了
}).ToList().Select(p => p.Product).ToList();
参考 : http://stackoverflow.com/questions/25276978/ef-6-add-where-clause-to-an-include-with-navigation-property
你可能有点疑惑,怎么这样写也行?!
其实原理很简单.
var product = db.products.ToList();
var colors = db.colors.ToList();
Color c = product.First().colors.First();
上面的第3句是可以拿到 color 的, 原理就是当 colors 被请求回来后,它会自动填入 product.colors 值,base on 他的 foreign key 做链接 。
只要在EF的作用域内,所有的关系都是会被填充的.
Entity Framewor 学习笔记 (include + where)的更多相关文章
- Entity Framewor 学习笔记 (碎碎的东西)
Proxy 类代理类是为了让EF实现lazy load才需要的 public class BloggingContext : DbContext { public BloggingContex ...
- Entity Framewor 学习笔记 (Enum)
EF 6 支持Enum 的处理 首先说一下 mysql 和 sql server 的区别 mysql 是有 Enum 这个类型的 , insert 时是放入 int , 出来的时候它会是 string ...
- Entity Framework学习笔记
原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总 之前的小项目做完了,到了总结经验和 ...
- Entity Framework 学习笔记(2)
上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...
- ADO.NET Entity Framework学习笔记(3)ObjectContext
ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转] 说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- Entity Framework学习笔记——错误汇总
之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...
- Entity Framework学习笔记(五)----Linq查询(2)---贪婪加载
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的 ...
- Entity Framework学习笔记——记一个错误解决方式及思路
继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...
随机推荐
- [Java] Collections - 源代码学习笔记
Collection interface 集合接口 1. 在 Collections 体系中,接口 Collection 是根接口 2. 是指一组对象,这些对象被称为 Collection 的元素. ...
- SqlServer中计算列详解
计算列区别于需要我们手动或者程序给予赋值的列,它的值来源于该表中其它列的计算值.比如,一个表中包含有数量列Number与单价列Price,我们就可以创建计算列金额Amount来表示数量*单价的结果值, ...
- NS CKD
NS 定义:ALB<30:高脂血症:大量蛋白尿>3.5g:浮肿 见于:肾小球肾炎.小血管炎.微血管血栓性疾病.NSAIDs引起的急性间质性肾炎.不见于肾大血管病.间质性.小管性疾病. 并发 ...
- shell编程(一)--常用变量及表达式
$? 表示执行上一个命令的返回值:如果为0表示执行成功,非0表示执行失败$1.$2.... 分别表示参数1.参数2....$# 表示这个程序的参数个数$*/$@ 表示这个程序的所有参数$$ 表示这个程 ...
- STL 常用的一些容器总结
数据结构 描述 实现头文件 向量(vector) 连续存储的元素 <vector> 列表(list) 由节点组成的双向链表 <list> 双队列(deque) 连续存储的指向不 ...
- <五>读《《大话设计模式》》之工厂模式
怎么又是工厂模式呢?上次不是讲过简单工厂模式吗?不错.此工厂模式非彼工厂模式. 工厂模式:定义一个用于创建对象的接口.让子类决定实例化那一个类,工厂方法是一个类的实例化延迟到其子类. 还是以代码来进行 ...
- Cloudra公司CCP:DS——认证数据专家
原文:http://vision.cloudera.com/24195/. 译文: 每天我都能看到大数据怎样改变我们生活的文章.数据科学家们正在生物医药领域找寻新的方法治愈癌症.帮助银行与欺诈做斗争, ...
- [Angular 2] ngrx/store
@ngrx/store builds on the concepts made popular by Redux and supercharges it with the backing of RxJ ...
- CSDN挑战编程——《数学问题》
数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<=100: 设S=max{x1*a1+x2*a2+x ...
- UML解惑:图说UML中的六大关系--转
UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑.这里给出这六种主要UML关系的说明和类图描述, ...