需要LINQ查询才能查找字符串项

我有一个List ,它存储一个NameClass项的集合,在NameClass有一个名为Name的属性。 我要做的是写一个Linq查询,它将拉出以Jones开头的所有名称,但仅限于有3次或更多次出现的名称。 例如,如果我的列表包含以下项目:

 Name ----------- Jones Jonestown Smith Hector Jones Smith Smith 

我正在寻找一个C#函数,我可以像这样调用:

 GetNames("Jones"); 

它应该返回:

 Jones Jonestown Jones 

如果我运行这个:

 GetNames("Smith"); 

它应该返回:

 Smith Smith Smith 

如果我运行这个:

 GetNames("Hector"); 

它应该返回任何内容,因为Hector不在列表中3次或更多次。

任何写这个LINQ查询的帮助将不胜感激!

 string searchString = "Jones"; string lowerSS = searchString.ToLower(); List nameClasses; var results = nameClasses.Where(nc => nc.Name.ToLower().StartsWith(lowerSS)); if(results != null && results.Count() >= 3) { return results; } else { return null; } 

你试过这个吗?

 public void GetNames(string pattern) { var q = from n in names where n.Name.StartsWith(pattern) select n; if (q.Count() >= 3) return q.ToList(); else return new List(); } 

我想你正在寻找这样的东西,不是吗?

 public static IEnumerable GetNames(IEnumerable names, String name, int minCount) { var matchingNames = names.Where(n => n.Name.StartsWith(name)); if (matchingNames.Count() >= minCount) { return matchingNames.ToList(); } else { return null; } } var jones = GetNames(names, "Jones", 3); 
 IEnumerable GetNames(string s, List list) { var filtered = list.Where(l => l.Name.StartsWith(s)); return filtered.Count() >= 3 ? filtered : null; } 

如果您在一个查询中不需要它,则此扩展方法应该执行此操作:

 public static IEnumerable GetNames(this IEnumerable list, string prefix, int minOccurences) { var res = list.Where(x => x.StartsWith(prefix)); return res.Count() >= minOccurences ? res : new string[0]; } 

一个“一个class轮”:

 public string[] GetNames(MyClass[] list, string prefix) { return list .Where(item => item.Name.StartsWith(prefix) && list.Count(temp => temp.Name.StartsWith(prefix)) > 2) .Select(l => l.Name) .ToArray(); }