Linq包含SQL Like%

时间:2014-02-06 12:13:16

标签: c# asp.net linq

基本上我想对像%这样的sql使用LINQ语句。我想.Contains是合适的,但我没有得到正确的结果。

我有一个模特:

public class Model {
    public string Number { get; set; }
}

在我的功能中:

private List<Model> getSearchResults(List<Model> models) 
{
    List<Model> result = models.Where(m => m.Number.Contains("3330")).ToList();

    return result;
}

在我的模型列表中最终是一个编号为3330的条目,但返回的结果为空。 :( 这也适用于.Contains(&#34; 333&#34;)。但它没有。

3 个答案:

答案 0 :(得分:2)

我怀疑你实际上是在使用linq-to-sql提供程序。 如果是这种情况,那么您应该使用SqlMethods.Like代替String.Contains

list.Where(l => SqlMethods.Like(l.Number, "%12%")).ToList();

答案 1 :(得分:0)

包含语句应该像sql operator'IN'一样使用。有关详细信息,请参阅链接:

tip-8-writing-where-in-style-queries-using-linq-to-entities

我认为你正在寻找这样的东西:

how-to-do-sql-like-in-linq

你应该这样使用:

List<Model> result = models.Where(m => m.Number.Contains("/3330/")).ToList();

您也可以使用.StartsWith()或.EndsWith()

答案 2 :(得分:0)

好的,这是我发给你的代码示例,是的,Contains方法当然可行:

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    public class Model {
        public string Number { get; set; }
    }

    private static List<Model> getSearchResults(List<Model> models) 
    {
        List<Model> result = models.Where(m => m.Number.Contains("3330")).ToList();

        return result;
    }

    public static void Main()
    {
        List<Model> list = new List<Model>() {
            new Model() { Number = "13330A"},
            new Model() { Number = "13230A"},
            new Model() { Number = "3330A"},
            new Model() { Number = "543330"},
            new Model() { Number = "48913"},
            new Model() { Number = "97798133"},
            new Model() { Number = "542130"}
        };

        foreach(Model v in getSearchResults(list)) {
            Console.WriteLine(v.Number);
        }      
    }
}

,输出为:

13330A
3330A
543330

检查您的代码,您可以在http://dotnetfiddle.net/143UgC

上使用此示例