C# 检查字符串是否包含带下划线的单词
C# check string contain a word with underscores
我想获取所有包含“_AT_”或“PV_”的项目,
但是 d.Nom.Contains($"PV_")
和 d.Nom.Contains($"_AT_")
也得到仅包含 "AT" 和 "PV"
的项目
IQueryable<DocumentMetadata> docPV = NHibernateSession.Current.Query<DocumentMetadata>()
.Where(d => d.IdEntiteRattachement == missionId
&& d.Nom.Contains($"PV_")
&& d.Desactive == false)
.OrderByDescending(d => d.DateDerniereModif);
IList<DocumentMetadata> docAR = NHibernateSession.Current.Query<DocumentMetadata>()
.Where(d => d.IdEntiteRattachement == missionId
&& d.Nom.Contains($"_AT_")
&& d.Desactive == false)
.OrderByDescending(d => d.DateDerniereModif).ToList();
在 SQL 中,下划线(和百分比)是通配符。 NHibernate 不会自动转义它们,因为您可以使用它们。 .Contains
后面还有SQL的LIKE
.
转义通配符取决于底层 DBMS。
试试这个:
d.Nom.Contains("\_AT\_")
(它可能不起作用。请参阅您的数据库引擎的文档。)
上面给出的 none 解决方案会以某种方式正确转义下划线(我试过 \_ @\_ [_] $_ ^_
)所以我最终在纯 LINQ 中再次过滤:
var list = dc.Employees.Where(a => a.Name.Contains(partial)).ToList();
if (partial.Contains("_")) // underscore is an sql wildcard character and will match anything, so filter again in .NET linq
list = list.Where(a => a.Name.Contains(partial)).ToList();
这显然不是最好的解决方案,因为它从数据库中检索的行数比必要的多,并在内存中再次过滤,但就我而言,开销是可以接受的。
我想获取所有包含“_AT_”或“PV_”的项目,
但是 d.Nom.Contains($"PV_")
和 d.Nom.Contains($"_AT_")
也得到仅包含 "AT" 和 "PV"
IQueryable<DocumentMetadata> docPV = NHibernateSession.Current.Query<DocumentMetadata>()
.Where(d => d.IdEntiteRattachement == missionId
&& d.Nom.Contains($"PV_")
&& d.Desactive == false)
.OrderByDescending(d => d.DateDerniereModif);
IList<DocumentMetadata> docAR = NHibernateSession.Current.Query<DocumentMetadata>()
.Where(d => d.IdEntiteRattachement == missionId
&& d.Nom.Contains($"_AT_")
&& d.Desactive == false)
.OrderByDescending(d => d.DateDerniereModif).ToList();
在 SQL 中,下划线(和百分比)是通配符。 NHibernate 不会自动转义它们,因为您可以使用它们。 .Contains
后面还有SQL的LIKE
.
转义通配符取决于底层 DBMS。
试试这个:
d.Nom.Contains("\_AT\_")
(它可能不起作用。请参阅您的数据库引擎的文档。)
上面给出的 none 解决方案会以某种方式正确转义下划线(我试过 \_ @\_ [_] $_ ^_
)所以我最终在纯 LINQ 中再次过滤:
var list = dc.Employees.Where(a => a.Name.Contains(partial)).ToList();
if (partial.Contains("_")) // underscore is an sql wildcard character and will match anything, so filter again in .NET linq
list = list.Where(a => a.Name.Contains(partial)).ToList();
这显然不是最好的解决方案,因为它从数据库中检索的行数比必要的多,并在内存中再次过滤,但就我而言,开销是可以接受的。