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(),那么它可以工作。。。你能提出一些不考虑情况的建议吗?