我有一个带有虚拟数据的简单List,如下所示:
List<Organisation> list = new List<Organisation>();
list.Add(new Organisation() { LogoUrl = "/images/logos/Blade.png", OrganisationId = 1, OrganisationName = "Blade" });
list.Add(new Organisation() { LogoUrl = "/images/logos/Torn.png", OrganisationId = 2, OrganisationName = "Torn" });
当我运行linq查询时:
var results = from org in OrganisationsController.GetDummyList()
where org.OrganisationName.StartsWith(searchString)
select org;
它总是返回一个空结果。在这种情况下,searchString由用户指定,示例为“Tor”。
使用不同的变体,例如搜索字符串为Torn的“where org.OrganisationName == searchString
”。但StartsWith永远不会奏效。
我出错的任何想法?
修改 从Jon的代码我改变我的代码如下:
public JsonResult Search(string searchString)
{
//create json result object
JsonResult data = new JsonResult();
var list = OrganisationsController.GetDummyList();
//query the list
var results = from org in list
where org.OrganisationName.ToLower().Contains(searchString.ToLower())
select org;
if (results.Any())
{
System.Diagnostics.Debug.Write("found");
}
//setup the data
data.Data = results;
//return the data
return Json(data, JsonRequestBehavior.AllowGet);
}
注意:我将StartsWith更改为Contains,但两者都给了我类似的问题。 我的一个组织叫做'Absa'。这是一个非常奇怪的事情,当我第一次启动应用程序时,'bsa'返回任何内容,然后输入'Absa'并返回一个好结果。然后我再次进入'bsa'进行双重检查,它返回了Absa,它在第一次测试中没有。为什么结果最初不起作用然后再工作?
谢谢, 雅克
答案 0 :(得分:3)
无法重现。它适用于我:
using System;
using System.Collections.Generic;
using System.Linq;
class Organisation
{
public string LogoUrl { get; set; }
// Removed redundant Organisation prefixes
public int Id { get; set; }
public string Name { get; set; }
}
class Test
{
static void Main()
{
// Used collection initializer for sanity
var list = new List<Organisation>
{
new Organisation { LogoUrl = "Blade.png", Id = 1, Name = "Blade" },
new Organisation { LogoUrl = "Torn.png", Id = 2, Name = "Torn" },
};
string searchString = "Tor";
var query = from org in list
where org.Name.StartsWith(searchString)
select org;
// Nicer version:
// var query = list.Where(org => org.Name.StartsWith(searchString));
Console.WriteLine(query.Count()); // 1
}
}
找出代码和代码之间的差异,找出问题所在。
特别是,您使用List<T>
显示代码,这意味着LINQ to Objects。如果您的真实代码使用LINQ to SQL或Entity Framework,那很容易影响事情。