2016-01-13 3 views
2

Я хотел бы использовать запрос в LINQ и использовать функцию, которая работает как «LIKE» в TSQL. Например:Запрос Linq с использованием contains не работает

SELECT salary 
FROM employees 
WHERE last_name LIKE 'R%'; 

Я пытаюсь сделать запрос в LINQ к БД Oracle. Запрос, кажется, работает очень хорошо, когда я не использую .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); 
+0

'Содержит()' должен работать, хотя это может быть слишком много. Для этого шаблона вы должны использовать 'StartsWith()'. Хотя, неважно, если вы не получите никаких результатов. Вы уверены, что есть соответствующие строки для каждой из этих объединенных таблиц? –

+0

Спасибо, Джефф, у него есть соответствующие строки, и он работает сейчас. – CesarD

ответ

6

Contains должен работать как он проверяет подстроки. Он равен исполнению заявления sql where BI_FORMAT_NAME LIKE '%Tom%'

Но если требуется запись для LIKE 'Tom%', вы можете использовать метод StartsWith.

where P.BI_FORMAT_NAME.StartsWith("Tom") 

Он должен работать до тех пор, как ваш запрос LINQ без пункта where возвращает запись с BI_FORMAT_NAME столбцом имеет значение, как "Tom" или "TomSomeThingElse"

LINQ методов для различных SQL like прецедентов положения являются

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

Спасибо, Шию! – CesarD

Смежные вопросы