2

文字列の列/メンバーに ">=" を使用して、レコードのコレクションをクエリしようとしています。

私が望む/期待しているのは、「ミュージシャン」メンバーに次の値が与えられた場合、そのような状態になることです:

Clarence "Gatemouth" Brown
Merle Travis
Eddie Van Halen
Rory Gallagher
Elvin Bishop
Eric Clapton
Jimi Hendrix
Stevie Ray Vaughan
Robin Trower
Ritchie Blackmore
Carlos Santana
Mark Knopfler
Pete Anderson

...そして次の LINQ クエリ:

private readonly List<Musician> musicians = new List<Musician>();
. . .
public IEnumerable<Musician> Get(string musician)
{
    IEnumerable<Musician> Musicians = from m in musicians
                                      where m.musician >= musician
                                      select m;
    . . .

...「Robin」が「musician」引数として渡された場合、musician の値が次のレコードを含む Musician の IEnumerbale コレクションを返します。

Robin Trower
Rory Gallagher
Stevie Ray Vaughan

(IOW、SQL クエリで「ORDER BY MUSICIAN」句を使用した場合に「Robin」以降に表示されるものなど、Robin よりも「大きい」もの)。

ただし、期待どおりに動作する代わりに、コンパイルすら行われず、「where m.musician >= LINQ クエリのミュージシャン」の部分。

では、LINQ を使用して "レコード" のコレクションを文字列値でフィルター処理するにはどうすればよいでしょうか?

4

6 に答える 6

1

以下を返す String.Compare(str1, str2) を使用する必要があります。

  • str1 が str2 より小さい場合はゼロ未満
  • str1 が str2 より大きい場合は 0 より大きい
  • 0 str1 が str2 に等しい

ここにドキュメントへのリンクがあります

    var musicians = new List<string>()
    {
        "Clarence \"Gatemouth\" Brown",
        "Merle Travis",
        "Eddie Van Halen",
        "Rory Gallagher",
        "Elvin Bishop",
        "Eric Clapton",
        "Jimi Hendrix",
        "Stevie Ray Vaughan",
        "Robin Trower",
        "Ritchie Blackmore",
        "Carlos Santana",
        "Mark Knopfler",
        "Pete Anderson",
    };

    var musician = "Robin";
    var newMusicians = musicians.Where(m => 0 < String.Compare(m,  musician));

    MessageBox.Show(String.Join(Environment.NewLine, newMusicians.ToArray()));

または、SQL のような構文を好む場合は、次のようにします。

var newMusicians = from m in musicians
                where 0 < String.Compare(m, musician)
                select m;
于 2013-11-12T19:34:56.437 に答える
1

検索文字列の任意の場所で特定の部分文字列を見つける、次のようなものを探していると思います。ただし、検索基準文字列の可能な部分文字列をすべて検索するわけではありません。

IEnumerable<Musician> Musicians = musicians.Where(m => m.IndexOf(musician, StringComparison.CurrentCultureIgnoreCase) >= 0);
于 2013-11-12T19:35:22.033 に答える
1

クエリを次のように置き換えます。

IEnumerable<Musician> Musicians = from m in musicians
                                  where string.Compare(m.musician, musician, true) > 0
                                  select m;
于 2013-11-12T19:51:29.980 に答える