Linq使用StartsWith始终为空

时间:2012-07-20 08:27:38

标签: c# linq

我有一个带有虚拟数据的简单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,它在第一次测试中没有。为什么结果最初不起作用然后再工作?

谢谢, 雅克

1 个答案:

答案 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,那很容易影响事情。