使用包含的LINQ查询不起作用 [英] Linq query using contains is not working

查看:50
本文介绍了使用包含的LINQ查询不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在LINQ中使用查询并在TSQL中使用类似于"LIKE"的功能. 例如:

I would like to use a query in LINQ and use a function that works like "LIKE" in TSQL. For example:

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

我正在尝试在LINQ中对Oracle数据库进行查询.当我不使用.Contains()时,该查询似乎工作得很好,当我添加它时,我得到了0条记录. 我不确定Contains()是否是执行此操作的正确方法. 这是我的LINQ代码:

I am trying to make a query in LINQ to an Oracle DB. The query seems to work very well when I am not using .Contains() and when I add it I get 0 records back. I am not sure if Contains() is the correct method to do this. Here is my LINQ code:

 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%'

Contains should work as it checks for a substring. It is equal to executing the sql statement where BI_FORMAT_NAME LIKE '%Tom%'

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

But if need records for LIKE 'Tom%' condition, You may use StartsWith method.

where  P.BI_FORMAT_NAME.StartsWith("Tom")

只要不带where子句的LINQ查询返回带有BI_FORMAT_NAME列的记录具有"Tom""TomSomeThingElse"

It should work as long as your LINQ query without the where clause is returning records with BI_FORMAT_NAME column has values like "Tom" or "TomSomeThingElse"

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

The LINQ methods for different SQL likeclause use cases are

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

这篇关于使用包含的LINQ查询不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆