繁体   English   中英

lambda表达式中的实体框架测试长度

[英]Entity Framework testing length in lambda expression

我试图编写一个Entity Framework lambda表达式来查找其中字符串字段的长度大于零的记录。 以下代码可以编译,但不会返回我期望的结果:

foreach (CUSTOMER c in (_db.CUSTOMERs.Where<CUSTOMER>(i => i.CUSTPREVIOUSEMAIL.Length > 0)))
{...}

结果返回的一组客户包括CUSTPREVIOUSEMAIL值为空字符串的客户。

为什么不起作用? 我该如何运作?

这是生成的SQL:

SELECT 
"B"."CUSTID" AS "CUSTID", 
"B"."CUSTFNAME" AS "CUSTFNAME", 
"B"."CUSTLNAME" AS "CUSTLNAME", 
"B"."CUSTADDRESS" AS "CUSTADDRESS", 
"B"."CUSTCITY" AS "CUSTCITY", 
"B"."CUSTSTATE" AS "CUSTSTATE", 
"B"."CUSTZIP" AS "CUSTZIP", 
"B"."CUSTTYPE" AS "CUSTTYPE", 
"B"."CUSTPHONE1" AS "CUSTPHONE1", 
"B"."CUSTPHONE2" AS "CUSTPHONE2", 
"B"."CUSTINTCLASS" AS "CUSTINTCLASS", 
"B"."CUSTSPARE1" AS "CUSTSPARE1", 
"B"."CUSTSPARE2" AS "CUSTSPARE2", 
"B"."CUSTDATE1" AS "CUSTDATE1", 
"B"."CUSTDATE2" AS "CUSTDATE2", 
"B"."CUSTEMAIL" AS "CUSTEMAIL", 
"B"."STOREID" AS "STOREID", 
"B"."CUSTDISCOUNT" AS "CUSTDISCOUNT", 
"B"."CUSTTAXEXEMPT" AS "CUSTTAXEXEMPT", 
"B"."CUSTNOTES" AS "CUSTNOTES", 
"B"."CUSTINACTIVE" AS "CUSTINACTIVE", 
"B"."CUSTBDAY" AS "CUSTBDAY", 
"B"."CUSTBADCHECK" AS "CUSTBADCHECK", 
"B"."CUSTDISOUNTCEXPIRES" AS "CUSTDISOUNTCEXPIRES", 
"B"."CUSTTERMS" AS "CUSTTERMS", 
"B"."CUSTPRICELEVEL" AS "CUSTPRICELEVEL", 
"B"."CUSTCREDITLIMIT" AS "CUSTCREDITLIMIT", 
"B"."CUSTTOTALMONEY" AS "CUSTTOTALMONEY", 
"B"."CUSTTOTALVOLUME" AS "CUSTTOTALVOLUME", 
"B"."CUSTTAXEXEMPT2" AS "CUSTTAXEXEMPT2", 
"B"."CUSTTAXEXEMPT3" AS "CUSTTAXEXEMPT3", 
"B"."CUSTPOPUPNOTES" AS "CUSTPOPUPNOTES", 
"B"."CUSTCOMPANY" AS "CUSTCOMPANY", 
"B"."CUSTCOUNTRY" AS "CUSTCOUNTRY", 
"B"."CUSTKEY" AS "CUSTKEY", 
"B"."CUSTTIMESTAMP" AS "CUSTTIMESTAMP", 
"B"."CUSTREFCODE" AS "CUSTREFCODE", 
"B"."CUSTSPARECHECK2" AS "CUSTSPARECHECK2", 
"B"."CUSTSPARECHECK3" AS "CUSTSPARECHECK3", 
"B"."CUSTSPARECHECK4" AS "CUSTSPARECHECK4", 
"B"."CUSTSPARECHECK5" AS "CUSTSPARECHECK5", 
"B"."CUSTTAXCODE" AS "CUSTTAXCODE", 
"B"."CUSTEMAILUPDATED" AS "CUSTEMAILUPDATED", 
"B"."CUSTPHONE3" AS "CUSTPHONE3", 
"B"."CUSTOPTOUT" AS "CUSTOPTOUT", 
"B"."CUSTLASTSYNCED" AS "CUSTLASTSYNCED", 
"B"."CUSTPREVIOUSEMAIL" AS "CUSTPREVIOUSEMAIL"
FROM "CUSTOMER" AS "B"
WHERE (CHAR_LENGTH("B"."CUSTPREVIOUSEMAIL")) > 0

我认为您必须检查null而不是0。试试这个foreach((_db.CUSTOMERs.Where(i => i.CUSTPREVIOUSEMAIL.ToLower()!=“ null”)中的C客户){...}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM