Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq在列表中搜索字符串_C#_Linq - Fatal编程技术网

C# 使用linq在列表中搜索字符串

C# 使用linq在列表中搜索字符串,c#,linq,C#,Linq,我有一个列表列表排名 列表排名中的项目是 "FF" "ABC" "CC" "FF" "FF" 我想要一个linq查询,它返回值(如果存在)及其计数,假设我搜索“FF”,那么它应该返回 value: ff count: 3 目前我正在使用此查询查找匹配项 var match = Rank.FirstOrDefault(s => s.Contains("FF")); 此查询用于对相同的值进行分组并为它们分配计数 var f = Rank.GroupBy(x => x).Select

我有一个列表
列表排名

列表排名中的项目是

"FF"
"ABC"
"CC"
"FF"
"FF"
我想要一个linq查询,它返回值(如果存在)及其计数,假设我搜索“FF”,那么它应该返回

value: ff
count: 3
目前我正在使用此查询查找匹配项

var match = Rank.FirstOrDefault(s => s.Contains("FF"));
此查询用于对相同的值进行分组并为它们分配计数

var f = Rank.GroupBy(x => x).Select(g => new { Value = g.Key, Count = g.Count() });
我尝试了这个,但它返回了我完整的列表,它看起来像where子句

var f = Rank.GroupBy(x => x).Select(g => new { Value = g.Key, Count = g.Count() }).Where(s => Rank.Contains("FF"));
有人知道为什么第三个查询不起作用吗

试试这个

var matchCount = Rank.Count(x=>x.Contains("FF"));
它将返回列表中包含“FF”的字符串计数,如果您不想知道是否有与谓词匹配的项,请执行以下操作:

if(Rank.Any(x=>x.Contains("FF"))
{
   ...
}
这几乎是正确的

var f = Rank.GroupBy(x => x)
            .Select(g => new { Value = g.Key, Count = g.Count() })
            .Where(s => Rank.Contains("FF"));
只需将结尾更改为,以便查询新创建的匿名对象

var f = Rank.GroupBy(x => x)
            .Select(g => new { Value = g.Key, Count = g.Count() })
            .Where(s => s.Value == "FF");
var list=新列表
{
“FF”、“ABC”、“CC”、“FF”、“FF”
};
字符串搜索=“FF”;
var result=list.GroupBy(l=>l).Where(g=>g.Key.Contains(search)).Select(s=>newtuple(s.Key,s.Count()).FirstOrDefault();

尝试使用count()方法。它允许您提供类似Where的匹配表达式。我将Where子句放在select语句之前,只是为了避免创建不需要的匿名对象,但在这种情况下Where子句应该是
。Where(g=>g.Key.Contains(“FF”)
。还要注意,检查子字符串(如问题代码中给出的)和检查相等性(如本答案中给出的)之间有很大的区别。所以@Vijay应该知道所有传入的数据,并且知道哪一个更好用。+1分!我的回答只是回答了他的问题“为什么第三个问题不起作用”。谢谢奥利弗的建议。还有@Ondrej:我标记了你的答案,因为它确实是我问题的答案,但就功能而言,我发现Wudzik ans.更有用,所以我在应用程序中使用了他的答案。@VijayRana Wudzik的代码是更好的解决方案,在构造复杂的linq查询时不太容易出错。正如我所说,我只是回答了你的问题,让你知道原因,而不仅仅是更好的解决方案。回头看问题并不能解决问题:)
var list = new List<string>
               {
                   "FF", "ABC", "CC", "FF", "FF"
               };
string search = "FF";

var result = list.GroupBy(l => l).Where(g => g.Key.Contains(search)).Select(s => new Tuple<string, int>(s.Key, s.Count())).FirstOrDefault();