LINQ to Entity,使用SQL LIKE运算符

Sla*_*der 12 asp.net-mvc linq-to-entities entity-framework

我有一个LINQ to ENTITY查询从表中提取,但我需要能够创建一个"模糊"类型的搜索.所以我需要添加一个where子句,按照姓氏搜索,如果他们在搜索框中添加条件(文本框,可以为空白---在这种情况下,它会拉动所有内容).

这是我到目前为止:

    var query = from mem in context.Member
                orderby mem.LastName, mem.FirstName
                select new
                {
                    FirstName = mem.FirstName,
                    LastName = mem.LastName,

                };
Run Code Online (Sandbox Code Playgroud)

这将把所有内容从Entity对象中的Member表中拉出来.

然后我对逻辑有了补充:

sLastName = formCollection["FuzzyLastName"].ToString();

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Contains(sLastName));
Run Code Online (Sandbox Code Playgroud)

问题是当按下搜索按钮时,不返回任何内容(0结果).我已经运行了我期望在这里发生的SQL Server查询,它返回6个结果.

这是我期望的查询:

SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName LIKE '%xxx%'
Run Code Online (Sandbox Code Playgroud)

(当xxx输入文本框时)

有人看到这个有什么不对吗?

编辑:修复了SELECT查询.我的意思是它读取LIKE'%xxx%'(NOT ='xxx")

Joh*_*ski 15

我想你想使用Contains()字符串参数的功能,如下所示:

var query = from mem in context.Member
    where mem.LastName.Contains("xxx")
    orderby mem.LastName, mem.FirstName
    select new
    {
        FirstName = mem.FirstName,
        LastName = mem.LastName,
    };
Run Code Online (Sandbox Code Playgroud)

我认为你也可以使用StartsWith(),EndsWith()它们分别等同于SQL'xxx%'和'%xxx'.

  • 对于其他人来看这个,我可以确认StartsWith和EndsWith确实被转换为SQL.http://stackoverflow.com/a/990499/1517929 (2认同)