0

我有一个带有虚拟数据的简单列表,如下所示:

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;

它总是返回一个 Empty 结果。在这种情况下,searchString 由用户指定,示例为“Tor”。

where org.OrganisationName == searchString在搜索字符串为 Torn 的情况下使用不同的变体,如 ' '。但是 StartsWith 永远不会起作用。

有什么想法我哪里出错了吗?

编辑: 从乔恩的代码中,我将代码更改为如下所示:

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,它在第一次测试中没有。为什么结果一开始不起作用然后起作用?

谢谢, 雅克

4

1 回答 1

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 或实体框架,那很容易影响事情。

于 2012-07-20T08:34:07.790 回答