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;

常に空の結果を返します。この場合、searchString はユーザーによって指定され、例は "Tor" になります。

where org.OrganisationName == searchString検索文字列が Torn である' ' のようなさまざまなバリエーションを使用すると機能します。しかし、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 に変更しましたが、どちらも同様の問題を引き起こしています。 私の組織の 1 つは「アブサ」と呼ばれています。アプリを初めて起動して「bsa」を入力しても何も返されないのは、本当に奇妙なことです。次に「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
    }
}

あなたのコードと私のコードの違いを調べて、何が間違っているのかを見つけてください。

特に、LINQ to Objects を意味するを使用したコードを示しました。実際のList<T>コードで LINQ to SQL または Entity Framework を使用している場合、簡単に影響を受ける可能性があります。

于 2012-07-20T08:34:07.790 に答える