Linq查询使用包含不起作用

Ces*_*arD 2 c# linq

我想在LINQ中使用一个查询,并在TSQL中使用类似"LIKE"的函数.例如:

 SELECT salary 
 FROM employees 
 WHERE last_name LIKE 'R%';
Run Code Online (Sandbox Code Playgroud)

我试图在LINQ中查询Oracle DB.当我不使用.Contains()时,查询似乎工作得非常好,当我添加它时,我得到0条记录.我不确定Contains()是否是正确的方法.这是我的LINQ代码:

 var queryOracle = (from TS in dbOracle.BI_TYPE_SERVICE
                                join MS in dbOracle.BI_MTR_SRV on TS.BI_ACCT equals MS.BI_ACCT
                                join SL in dbOracle.BI_SRV_LOC on MS.BI_SRV_LOC_NBR equals SL.BI_SRV_LOC_NBR
                                join C in dbOracle.BI_CONSUMER on TS.BI_ACCT equals C.BI_ACCT
                                join P in dbOracle.BI_PERSONAL on C.BI_CUST_NBR equals P.BI_CUST_NBR
                                join STR in dbOracle.BI_SRV_STAT_REF on TS.BI_SRV_STAT_CD equals STR.BI_SRV_STAT_CD
                               where  P.BI_FORMAT_NAME.Contains("Tom")

                               select new
                              {
                              LocationID = SL.BI_SRV_MAP_LOC,
                              MeterNumber = MS.BI_MTR_NBR,
                              AccountNumber = TS.BI_ACCT,
                              ServiceStatCD = TS.BI_SRV_STAT_CD,
                              ServiceStatus = STR.BI_SRV_STAT_DESC,
                              Name = P.BI_FORMAT_NAME,
                              ServiceAddr = SL.BI_ADDR1,
                              ServiceCity = SL.BI_CITY,
                              CustomerNumber = C.BI_CUST_NBR,
                              ServiceCNTY = SL.BI_CNTY_CD,
                              ServiceTOWN = SL.BI_TOWN_CD,
                              HomeAreaCode = P.BI_HOME_AREA_CD,
                              HomePhone = P.BI_HOME_PHN,
                              BusAreaCode = P.BI_BUS_AREA_CD,
                              BusPhone = P.BI_BUS_PHN,
                              MobileAreaCode = P.BI_MOBL_AREA_CD,
                              MobilePhone = P.BI_MOBL_PHN
                          }).Take(10);
Run Code Online (Sandbox Code Playgroud)

Shy*_*yju 6

Contains应该工作,因为它检查子字符串.它等于执行sql语句where BI_FORMAT_NAME LIKE '%Tom%'

但是如果需要记录LIKE 'Tom%'条件,你可以使用StartsWith方法.

where  P.BI_FORMAT_NAME.StartsWith("Tom")
Run Code Online (Sandbox Code Playgroud)

只要没有where子句的LINQ查询返回的BI_FORMAT_NAME列具有类似"Tom"或的值的列,它就应该工作"TomSomeThingElse"

用于不同SQL like子句用例的LINQ方法是

  1. LIKE '%To%' - > Contains("To")
  2. LIKE 'Tom%' - > StartsWith("Tom")
  3. LIKE '%Tom' - > EndsWith("Tom")