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”arg 传递,返回 Musician 的 IEnumerbale 集合,其中包含以下音乐家值的记录:

Robin Trower
Rory Gallagher
Stevie Ray Vaughan

(IOW,任何“大于” Robin,例如如果在 SQL 查询中使用“ORDER BY MUSICIAN”子句,从“Robin”开始出现的内容)。

但是,它并没有按预期工作,而是甚至没有编译,我得到,“运算符'> ='不能应用于“m.musician > =”上的“字符串”和“字符串”类型的操作数LINQ 查询的一部分。

那么如何使用 LINQ 按字符串值过滤“记录”集合呢?

4

6 回答 6

1

您应该使用返回的 String.Compare(str1, str2):

  • 如果 str1 小于 str2,则小于零
  • 如果 str1 大于 str2,则大于零
  • 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
var newList = myList.OrderBy(m => m).Where(m => string.Compare(m, "Robin") > 0);

其中 myList 是您的字符串值列表。

于 2013-11-12T19:39:13.700 回答
1

您可以在 LINQ 查询中使用 String.Compare,如下所示:

IEnumerable<Musician> Musicians = from m in musicians
                                          where String.Compare(m.musician, musician) > 0
                                          select m;
于 2013-11-12T19:40:55.697 回答
1
var Musicians = MusicianList
          .Where(m => string.Compare(m.musician, musician) >= 0)
          .OrderBy(m=>m.musician);

返回您想要的结果

于 2013-11-12T19:41:44.697 回答
1

将您的查询替换为:

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