LINQ to Entity,使用SQL LIKE运算符

asp.net-mvc entity-framework linq-to-entities

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

这是我到目前为止:

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

                };

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

然后我对逻辑有了补充:

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

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Contains(sLastName));

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

这是我期望的查询:

SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName LIKE '%xxx%'

(当xxx输入文本框时)

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

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

一般承认的答案

我想你想使用string参数的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,
    };

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


热门答案

只有在附加“Where”子句后才能将“select new”添加到查询中。

因此,使用对象调用语法追加您的select子句,就像使用where子句一样。

未经测试,请原谅小错误,但一般概念将....

   using( someContent sc = new someContent())
   {
      var query = sc.Member.OrderBy( i => i.LastName)
                    .ThenBy( i => i.FirstName);

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

      if (!String.IsNullOrEmpty(sLastName))
          query = query.Where(ln => ln.LastName.Contains(sLastName));

      query = query.Select( i => new
                {
                    FirstName = i.FirstName,
                    LastName = i.LastName,

                });
    }



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因