首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >向实体添加新的LINQ方法

向实体添加新的LINQ方法
EN

Stack Overflow用户
提问于 2013-07-01 01:47:27
回答 2查看 125关注 0票数 3

是否有任何方法为Linq2Entities的其他函数定义SQL转换组件。

例如:

代码语言:javascript
运行
AI代码解释
复制
myQuery.Where(entity => entity.Contains('foo', SearchFlags.All))

理想情况下,我正在寻找不需要直接编辑和构建新版本的EntityFramework.dll的东西。是否有任何方法允许将扩展方法扩展到可以支持SQL生成的实体框架。

到目前为止,我有一个模板来表示我需要替换的LINQ实体的方法:

代码语言:javascript
运行
AI代码解释
复制
public static bool Contains(this object source, string searchTerms, SearchFlags flags)
{
    return true;
}

当然,这会导致错误:

LINQ到实体不识别方法‘布尔包含(System.Object,System.String,SearchFlags)’方法,并且这个方法不能被转换成存储表达式。

说清楚,我不想做:

代码语言:javascript
运行
AI代码解释
复制
myQuery.AsEnumerable().Where(entity => entity.Contains('foo', SearchFlags.All))

因为我希望能够在SQL空间中执行代码,而不是手动返回所有实体。

我也不能使用.ToString()IQueryable并手动执行它,因为我需要实体框架来填充来自几个.Include联接的对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 22:50:34

最后,我做了以下工作(这很有效,但还远远不够完美):

  1. 我的所有实体都继承自定义IEntitylong Id { get; set; }
  2. 然后我添加了一个冗余限制context.myEntities.Where(entity => entity.Id != 0) --这是多余的,因为标识从1开始,但是Linq2Entities不知道这一点。
  3. 然后,在完成所有其他查询之后,我在IQueryable上调用DBQuery<Entity>,因为它的类型是DBQuery<Entity>--它返回SQL文本,因此我使用查询限制执行简单的替换操作。
  4. 为了使所有的.Include(...)都能工作,我实际上执行了两个不同的sql命令。没有其他更好的方法来利用这一点,因为查询执行计划缓存会导致其他问题(即使在禁用时)。

因此,我的代码如下所示:

代码语言:javascript
运行
AI代码解释
复制
public IQueryable<IEntity> MyNewFunction(IQueryable<IEntity> myQueryable, string queryRestriction)
{
    string rawSQL = myQueryable.Select(entity => entity.Id).ToString().Replace("[Extent1].Id <> 0", queryRestriction);
    List<long> ids = // now execute rawSQL, get the list of ids;
    return myQuerable.Where(entity => ids.Contains(entity.Id));
}

简而言之,除了手动执行SQL或运行类似的SQL命令并使用现有命令附加限制之外,将自己的方法写入Linq到实体的唯一方法是从EntityFramework.dll源手动修改和构建自己的EF6。

票数 0
EN

Stack Overflow用户

发布于 2013-07-31 11:26:55

我不清楚你的问题。但是,如果您的问题是无法使用自己的方法或其他linq方法,只需使用.AsEnumerable(),并通过linq执行其他工作,而不是L2E:

代码语言:javascript
运行
AI代码解释
复制
myQuery.AsEnumerable().Where(entity => entity.Contains('foo', SearchFlags.All))

如果您需要在其他地方多次使用myQuery,首先将其加载到内存中,然后任意使用它:

代码语言:javascript
运行
AI代码解释
复制
var myQuery = from e in context.myEntities
              select d;
myQuery.Load();

// ...

var myOtherQuery = from d in context.myEntities.Local                        
                    select d;
                    // Now any L2O method is supported...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17401495

复制
相关文章
2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true
2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true true false false;D: true true false true true。
福大大架构师每日一题
2022/09/30
1.3K0
2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。 pac
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。
福大大架构师每日一题
2022/10/28
1.1K0
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。 pac
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D:false true。
福大大架构师每日一题
2022/11/06
8980
2022-10-28:以下go语言代码输出什么?A:false false;B:true false;C:true true;D
java lang illegalargument_java true false
我们的JSP项目在上传文件时通常都需要获取目录在服务器上的绝对路径,request.getRealPath()方法显示已经过时,但是还是有替代方法的。HttpSession session = request.getSession(true); //获取session
全栈程序员站长
2022/10/02
4320
Unrecognized token 'XXXX': was expecting ('true', 'false' or 'null')
当dataType指定为json后,1.4+以上的jquery版本对json格式要求更加严格.如果不是严格的json格式,就不能正常执行success回调函数.
ydymz
2018/09/10
7.7K0
index=False与index=True的含义
在 Excel 中 index 函数是用来引用我们所需的信息. index = False:输出不显示 index (索引)值 index = True:输出显示 index (索引)值 ---- 一、index = False 二、index = True ---- 一、index = False 代码示例 运行结果 二、index = True 代码示例 运行结果
荣仔_最靓的仔
2021/09/07
2.7K0
面试:a==1 && a==2 && a==3 是 true 还是 false?
这是一个JS社区抛出来的问题。第一眼看到这个问题的时候,感觉这似乎是一个无稽之谈,一个变量怎么可能会同时满足俩个条件呢!
程序猿DD
2021/07/13
6160
面试:a==1 && a==2 && a==3 是 true 还是 false?
做「容量预估」可没有true和false
虽然如此,但是那些体量达到亿级或者是千万级的产品也只是少数公司的专属。对于整个行业里百万+的程序员群体来说,估计也就只有10%人有机会接触到这些“大系统”。
Zachary_ZF
2019/08/31
9920
Javascript中的Return,Return false和Return true
版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/52928626
Tyan
2019/05/25
2.4K0
面试官:为什么“false == []”和“false == ![]”都返回true?
英文 | https://javascript.plainenglish.io/interviewer-why-do-false-and-false-both-return-true-6e7944220337
winty
2023/01/09
9980
面试题:a==1 && a==2 && a==3 是 true 还是 false?
这是一个JS社区抛出来的问题。第一眼看到这个问题的时候,感觉这似乎是一个无稽之谈,一个变量怎么可能会同时满足俩个条件呢!
良月柒
2021/07/13
5580
面试题:a==1 && a==2 && a==3 是 true 还是 false?
shell判空true false的一个坑
在写shell的时候发现一个违反直觉的的操作,一般判断一个变量是否为boolean,习惯上使用if param。 但是在写脚本的时候,发现无论如何,不会走false。
潇洒
2023/10/20
8030
为什么1000==1000返回false,100==100返回true?
这可能是个讨论得较多的话题,但是我觉得它很有趣:为什么1000==1000返回false,100==100返回true?
三哥
2018/12/19
1.2K0
@Modifying(clearAutomatically = true)
今天在写测试的时候,里面有一个逻辑是更新数据,因为需要同时更新多条数据,所以我使用了JPQL来更新数据,但是在更新的语句成功执行并返回了更新了N条数据后,再次执行查询到的数据还是没有更新过的数据。
前Thoughtworks-杨焱
2021/12/07
1.1K0
leetcode 139. 单词拆分---完全背包问题之true or false类型
单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。
大忽悠爱学习
2021/11/15
5480
每周四更面试题:True+True=?
面试题:True + Ture == ? Python 的 “+” 号会根据操作对象数据类型的不同而进行重载,操作对象为数字类型时,它是算术运算符;操作对象为序列类型时,它是序列连接符。 那么问题是:如果操作对象为布尔类型呢? 你是否会认为?在揭晓答案前,首先了解一下 Python 的布尔数据类型。 布尔值 布尔数据类型只有 True or False 两个值,它作为逻辑判断的基准被应用在程序各处的布尔上下文中(e.g. if、while、for 等逻辑控制语句)。 虽然我们也会经常在布尔上下文中使用表
企鹅号小编
2018/01/22
8150
每周四更面试题:True+True=?
为什么Java中1000==1000为false而100==100为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
Leetcode名企之路
2020/09/04
6250
为什么 Java 中“1000==1000”为false,而”100==100“为true?
基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。
周辰晨
2022/09/20
4950
点击加载更多

相似问题

在MasterPage的超链接中设置动态Href

10

单击MasterPage中的链接按钮时出错

12

超链接控件vs链接按钮vs ImageButton vs ASP.NET中的按钮控件

12

使用服务器控件按钮打开与rel="“和href="”的链接

12

按钮、UpdatePanel和MasterPage

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文