简体   繁体   中英

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. 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.

Why doesn't this work? How can I make it work?

Here is the generated 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客户){...}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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