C# 如何使用contains在Linq to SQL中搜索字符串
我使用下面的代码在多个列中搜索特定字符串C# 如何使用contains在Linq to SQL中搜索字符串,c#,sql,linq,C#,Sql,Linq,我使用下面的代码在多个列中搜索特定字符串 IEnumerable<UserProductDetailResult> _query = from eml in dc.UserProductDetails join zk in dc.ZeekUsers on eml.aspnet_User.UserId equals zk.UserId where eml.aspnet_User.LoweredUserName.Equals(strUserName.ToL
IEnumerable<UserProductDetailResult> _query
= from eml in dc.UserProductDetails
join zk in dc.ZeekUsers on eml.aspnet_User.UserId equals zk.UserId
where eml.aspnet_User.LoweredUserName.Equals(strUserName.ToLower())
&& (eml.Username.Contains(strSearch)
|| eml.ProductURL.Contains(strSearch)
|| eml.Nickname.Contains(strSearch))
&& !eml.IsDeleted
&& eml.IsActive
select new UserProductDetailResult
{
_userProductDetail = eml,
_zeekUser = zk
};
一旦删除下面的搜索行,它就会工作并返回
&& (eml.Username.Contains(strSearch)
|| eml.ProductURL.Contains(strSearch)
|| eml.Nickname.Contains(strSearch))
但这不允许我搜索
有人能告诉我应该如何进行吗?根据您生成的查询,我认为您正在使用
linq to sql
。您可以使用从MSDN生成正确的like
查询运算符:
确定特定字符串是否与指定字符串匹配
图案此方法目前仅在LINQ to SQL中受支持
查询
对于示例:
// first sample, any part of string
strSearch = string.Format("%[^a-zA-Z]{0}[^a-zA-Z]%", strSearch);
// on the end of the string
strSearch = string.Format("%[^a-zA-Z]{0}", strSearch);
//on the begining of the string
strSearch = string.Format("{0}[^a-zA-Z]%", strSearch);
strSearch = string.Contat("%", strSearch, "%");
在查询语句中
(SqlMethods.Like(eml.Username, strSearch)
|| SqlMethods.Like(eml.ProductURL, strSearch)
|| SqlMethods.Like(eml.Nickname, strSearch))
否则,您可以在查询之前在strearch
字符串中添加%
字符,以生成包含字符串任何部分信息的查询,例如:
// first sample, any part of string
strSearch = string.Format("%[^a-zA-Z]{0}[^a-zA-Z]%", strSearch);
// on the end of the string
strSearch = string.Format("%[^a-zA-Z]{0}", strSearch);
//on the begining of the string
strSearch = string.Format("{0}[^a-zA-Z]%", strSearch);
strSearch = string.Contat("%", strSearch, "%");
我已经创建了一个nuget包,可以在这里帮助您。它将使您能够使用以下语法:
var result = dc.UserProductDetails
.Where(eml => eml.IsActive && !eml.IsDeleted)
.Search(eml => eml.aspnet_User.LoweredUserName) // Search LoweredUsername
.IsEqual(strUserName) // when equals strUsername
.Search(eml => eml.UserName, // Search UserName
eml => eml.ProductURL, // OR ProductUrl
eml => eml.Nickname) // OR Nickname
.Containing(strSearch) // When contains strSearch
.Select(eml => new UserProductDetailResult // Build result...
{
_userProductDetail = eml
});
你可以从这里下载这个软件包
…还可以查看以获取更详细的信息
希望这有助于给出一个搜索字符串和您希望找到的潜在值的示例。如果我输入search=“a”,那么它应该返回用户名、产品URL、昵称中包含“a”的所有行,而不考虑SQL中与“%a%”等效的大小写和单词。@Felipe。。。它不起作用。。。如果我在搜索和列中都使用ToUpper(),那么它可以工作。。。你能提出一些不考虑情况的建议吗?