LINQ to Entity,使用SQL LIKE运算符

时间:2010-03-22 15:58:09

标签: 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“)

3 个答案:

答案 0 :(得分: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,
    };

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

答案 1 :(得分:3)

仅在追加“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,

                });
    }

答案 2 :(得分:1)

SELECT mem.LastName, mem.FirstName FROM Members mem WHERE mem.LastName = 'xxx'

这意味着您希望姓氏等于'xxx'。你在上面的帖子中写的是姓氏应该包含'xxx'。

为了使它平等,你应该写:

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

也许你应该看看忽略的情况:

if (!String.IsNullOrEmpty(sLastName))
   query = query.Where(ln => ln.LastName.Equals(sLastName, StringComparison.InvariantCultureIgnoreCase));