C# 如何基于字符串值通过LINQ查询列表的内容?

C# 如何基于字符串值通过LINQ查询列表的内容?,c#,string,linq,generics,ienumerable,C#,String,Linq,Generics,Ienumerable,我正在尝试使用“>=”查询字符串列/成员的记录集合 我想要/期望的是,如果“音乐家”成员中有以下值,则这种情况会发生: …和以下LINQ查询: private readonly List<Musician> musicians = new List<Musician>(); . . . public IEnumerable<Musician> Get(string musician) { IEnumerable<Musician> Musi

我正在尝试使用“>=”查询字符串列/成员的记录集合

我想要/期望的是,如果“音乐家”成员中有以下值,则这种情况会发生:

…和以下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的内容,例如,如果在SQL查询中使用“ORDER BY Musitor”子句,则从“Robin”开始显示的内容)

然而,它并没有像预期的那样工作,它甚至没有编译,我在LINQ查询的“where m.Musiner>=Musiner”部分得到,“运算符'>='不能应用于'string'和'string'类型的操作数”


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

您应该使用string.Compare(str1,str2),它返回:

  • 如果str1小于str2,则小于零
  • 如果str1大于str2,则大于零
  • 如果str1等于str2,则为0

var=newlist()
{
“克拉伦斯”“盖特茅斯”“布朗”,
“梅尔特拉维斯”,
“埃迪·范·海伦”,
“Rory Gallagher”,
“艾文·毕肖普”,
“埃里克·克莱普顿”,
“吉米·亨德里克斯”,
“史蒂维·雷·沃恩”,
“罗宾·特罗沃”,
“里奇·布莱克莫尔”,
“卡洛斯·桑塔纳”,
“马克·克诺普勒”,
“皮特·安德森”,
};
var=“罗宾”;
var newmuchers=muchers.Where(m=>0
或者,如果您更喜欢类似sql的语法:

var newMusicians = from m in musicians
                where 0 < String.Compare(m, musician)
                select m;
var newmuseers=来自音乐家中的m
其中0
我想您可能正在寻找类似以下内容的内容,它可以在搜索字符串中的任何位置找到给定的子字符串。但是,它不会搜索搜索条件字符串的每个可能的子字符串

IEnumerable<Musician> Musicians = musicians.Where(m => m.IndexOf(musician, StringComparison.CurrentCultureIgnoreCase) >= 0);
IEnumerable muchers=muchers.Where(m=>m.IndexOf(mucher,StringComparison.CurrentCultureIgnoreCase)>=0);

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

您可以使用字符串。在LINQ查询中进行如下比较:

IEnumerable<Musician> Musicians = from m in musicians
                                          where String.Compare(m.musician, musician) > 0
                                          select m;
IEnumerable museers=来自音乐家中的m
其中String.Compare(m.音乐家,音乐家)>0
选择m;

返回所需结果

将查询替换为以下内容:

IEnumerable<Musician> Musicians = from m in musicians
                                  where string.Compare(m.musician, musician, true) > 0
                                  select m;
IEnumerable museers=来自音乐家中的m
其中string.Compare(m.music,music,true)>0
选择m;

您可以使用
字符串。比较(m.Musitor,Musitor)>=0
,但它仍然有点不可靠。我甚至不确定SQL转换。如果Musitor是一个类,则需要重写运算符>=。@LuizFelipe否,他在比较字符串,而不是
Musitor
对象。哦,是的,很抱歉没有引起注意。这在字符串中找不到子字符串。这是为了查看是否存在任何字符,而子字符串将验证所有字符是否按顺序存在。类似sql的语法的where部分是否必须是:where 0IEnumerable<Musician> Musicians = musicians.Where(m => m.IndexOf(musician, StringComparison.CurrentCultureIgnoreCase) >= 0);
var newList = myList.OrderBy(m => m).Where(m => string.Compare(m, "Robin") > 0);
IEnumerable<Musician> Musicians = from m in musicians
                                          where String.Compare(m.musician, musician) > 0
                                          select m;
var Musicians = MusicianList
          .Where(m => string.Compare(m.musician, musician) >= 0)
          .OrderBy(m=>m.musician);
IEnumerable<Musician> Musicians = from m in musicians
                                  where string.Compare(m.musician, musician, true) > 0
                                  select m;