簡體   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