首页 > 其他分享 >关于“LINQ to Entities does not recognize the Method '...' ”问题原因浅析

关于“LINQ to Entities does not recognize the Method '...' ”问题原因浅析

时间:2024-04-03 15:58:02浏览次数:32  
标签:... Name StringComparison recognize edm host && null 浅析

LINQ to Entities 中,有些断言能对内存实体使用,但是发到数据库端可能因无法解析而抛出异常,需要特别注意。示例如下:

        [TestMethod]
        public void DataSourceGetOneTest()
        {
            string host = "localHost";
            IList<string> IpAddress = EnvironmentEx.GetIpAddress();
            ServerContext sc = this.CreateServerContext();
            using (EdmWcfService edm = sc.CreateEdm<EdmWcfService>(Dbs.His))
            {
                // a => string.Equals(a.Name, host, StringComparison.CurrentCultureIgnoreCase不能用于数据库端,否则报下面错误:
                // System.ArgumentException:“为方法“Boolean Equals(System.String, System.String, System.StringComparison)”的调用提供的参数的数量不正确”
                // var dto = edm.WcfServers.FirstOrDefault(a => string.Equals(a.Name, host, StringComparison.CurrentCultureIgnoreCase));

                // 如下用法是正确的:
                var dto = edm.WcfServers.FirstOrDefault(a => (a.Name != null && a.Name.Equals(host, StringComparison.CurrentCultureIgnoreCase))
                                          || (a.Name != null && a.FullName.Equals(host, StringComparison.CurrentCultureIgnoreCase)));
                // 下面写法也会报错如下:
                // LINQ to Entities does not recognize the method 'Boolean StartsWith(System.String, System.StringComparison)' method, and this method cannot be translated into a store expression.
                //dto = edm.WcfServers.FirstOrDefault(a => (a.Name != null && a.Name.StartsWith(host, StringComparison.CurrentCultureIgnoreCase))
                //                          || (a.Name != null && a.FullName.StartsWith(host, StringComparison.CurrentCultureIgnoreCase)));

                // 如下用法是正确的:
                dto = edm.WcfServers.FirstOrDefault(a => (a.Name != null && a.Name.ToUpper().StartsWith(host.ToUpper()))
                                          || (a.Name != null && a.FullName.ToUpper().StartsWith(host.ToUpper())));

                int serverId = (dto != null) ? dto.ServerId : -1;
                Assert.IsTrue(serverId > 0);
            }

        }

其次,ORACLE数据库中空字符串被视为NULL处理,因此数据库SQL函数中字段值为' '(空格)的被 RTRIM(LRTRIM(a.Name)) 调用后结果并非空字符串,而是NULL。所以需要注意:

    [TestMethod()]
    public void TestEdmQuery()
    {
        using (ServerContext sc = WcfServiceHelper.CreateServerContext(ClientContext.Instance))
        {
            using (EdmConfig edm = sc.CreateEdm<EdmConfig>(Dbs.His))
            {
                var query = edm.EntityPickers.Where(a => a.UseCaseKey != null && a.UseCaseKey.Trim() == null);
                string tracestring = query.ToTraceString();
                Debug.Print(tracestring);
                IList<DtoEntityPicker> ret = query.ToList();
            }
        }
    }

 

标签:...,Name,StringComparison,recognize,edm,host,&&,null,浅析
From: https://www.cnblogs.com/chriskwok/p/18112855

相关文章

  • 简直了,被“Java并发锁”问题追问到自闭...
    故事地铁上,小帅双目空洞地望着窗外...绝望,发自内心地感到绝望...距离失业已经过去两个月了,这是小帅接到的第四次面试邀请。“回去等通知吧...”,简简单单的六个字,把小帅的心再次打入了冰窖。上次“【ThreadLocal问出花】”,小帅其实也有吸取教训得,这次对于多线程的问题还是做了......
  • 【蓝桥杯】小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母
    【问题描述】小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大写字母,小明将它转换成它在26个英文字母中序号,即A→1,B→2,...Z→26。这样一个字符串就能被转化成一个数字序列:比如ABCXYZ→123242526。现在给定一个转换后的数字序列,小明想还原出原本的......
  • Java中文乱码浅析及解决方案
    Java中文乱码浅析及解决方案引言一、中文乱码现象描述1.1什么是中文乱码?1.2中文乱码产生的原因二、中文乱码的产生场景2.1控制台输出乱码2.2文件读写乱码2.3网络传输乱码2.4数据库存储乱码三、解决中文乱码的方法3.1统一编码为UTF-83.1.1系统环境设置3.1.2编......
  • Pod安全上下文与Linux Capabilities浅析
    目录前言一、Pod安全上下文介绍二、使用方法与应用场景2.1以普通用户运行容器2.2限制特权容器的使用2.3设置文件系统只读三、LinuxCapabilities概念使用方式使用示例四、总结前言        在云原生时代,Kubernetes已经成为容器编排的事实标准,提供了强......
  • CyberDog测试视频 —— 【开箱】小米"限量"机器狗!被我玩坏了...
    地址:https://www.youtube.com/watch?v=3ntAhy3thXMPS.现在的智能机器人其实真的没有人们想象中的那么智能。感觉现在的智能机器人最为有用的功能一个是倒地自动重新站立,一个是急停控制。......
  • 我们正在被 DDoS 攻击,但是我们啥也不干,随便攻击...
    最近,一场激烈的攻防大战在网络世界悄然上演。主角不是什么国家安全局或者黑客组织,而是一家名不见经传的创业公司——TablePlus。DDoS攻击者们摩拳擦掌,跃跃欲试。他们从四面八方蜂拥而至,誓要用数亿次请求把TablePlus的服务器挤爆、搞垮。特别是那些来自德国和英国的流量,简直有......
  • AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎...
    老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。平台架构平台特性基于HTML5和WebGL技术,可在主流浏览器上进行快速浏览和调试,支持P......
  • 求 1 - 1/2 + 1/3 - 1/4 + 1/5 -... + 1/99 - 1/100
    通过分析,可以发现:分子不变分母++符号———》分母是偶数就为负,分母为奇数则为加号累加//1-1/2+1/3-1/4+...+1/99-1/100=?#include<stdio.h>intmain(){doublesum=1.0;for(inti=2;i<101;i++){//i即分母if(i%2==0){//......
  • C/C++ 语言中的 ​if...else if...else 语句
    C/C++语言中的​if...elseif...else语句1.`if`statement2.`if...else`statement3.`if...elseif...else`statementReferences1.ifstatementThesyntaxoftheifstatementis:if(condition){//bodyofifstatement}Thecodeins......
  • MySQL各类查询语句DQL--like in between...and
    数据库名称可以为【schoolDB】,字符集【utf8】,排列规则【utf8_general_ci】建立表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DE......