栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Linq to Entities中的动态where子句(OR)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linq to Entities中的动态where子句(OR)

使用LINQKit的
PredicateBuilder,您可以动态地构建谓词。

var query = from u in context.Users select u;var pred = Predicate.False<User>();if (type.HasFlag(IdentifierType.Username))    pred = pred.Or(u => u.Username == identifier);if (type.HasFlag(IdentifierType.Windows))    pred = pred.Or((u => u.WindowsUsername == identifier);return query.Where(pred.Expand()).FirstOrDefault();// or return query.AsExpandable().Where(pred).FirstOrDefault();

Expand
是为了:

实体框架的查询处理管道无法处理调用表达式,这就是为什么您需要在查询中的第一个对象上调用AsExpandable的原因。通过调用AsExpandable,您可以激活LINQKit的表达式访问者类,该类将调用表达式替换为Entity
framework可以理解的更简单的结构。

或者:如果没有它,则表达式为

Invoke
d,这将导致EF中的异常:

LINQ to Entities不支持LINQ表达式节点类型’Invoke’。

以后添加:

有一个替代谓词构建器,其功能相同,但没有扩展:http : //petemontgomery.wordpress.com/2011/02/10/a-universal-
predicatebuilder/



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452107.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号