基本上我想对像%这样的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;)。但它没有。
答案 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
我认为你正在寻找这样的东西:
你应该这样使用:
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
上使用此示例