简体   繁体   English

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

[英]Entity Framework testing length in lambda expression

I'm trying to write an Entity Framework lambda expression to find records in which a string field has a length greater than zero. 我试图编写一个Entity Framework lambda表达式来查找其中字符串字段的长度大于零的记录。 The following code compiles, but does not return the results I was expecting: 以下代码可以编译,但不会返回我期望的结果:

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

The resulting set of customers are coming back including customers whose CUSTPREVIOUSEMAIL value is an empty string. 结果返回的一组客户包括CUSTPREVIOUSEMAIL值为空字符串的客户。

Why doesn't this work? 为什么不起作用? How can I make it work? 我该如何运作?

Here is the generated SQL: 这是生成的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