我想在LINQ中使用查询,并在TSQL中使用类似于“ LIKE”的功能。
例如:
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);
最佳答案
Contains
应该在检查子字符串时起作用。等同于执行sql语句where BI_FORMAT_NAME LIKE '%Tom%'
但是,如果需要有关LIKE 'Tom%'
条件的记录,则可以使用StartsWith
方法。
where P.BI_FORMAT_NAME.StartsWith("Tom")
只要不带
where
子句的LINQ查询返回带有BI_FORMAT_NAME
列的记录具有"Tom"
或"TomSomeThingElse"
之类的值,它就应该起作用用于不同SQL
like
子句用例的LINQ方法是LIKE '%To%'
-> Contains("To")
LIKE 'Tom%'
-> StartsWith("Tom")
LIKE '%Tom'
-> EndsWith("Tom")
关于c# - 使用包含的LINQ查询不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34777044/