需要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(); }