C# 需要LINQ查询来查找字符串项
我有一个列表,其中存储了一个名为Name的属性在类中的NameClass项集合。我试图做的是编写一个Linq查询,它将提取所有以Jones开头的名字,但前提是出现3次或更多。例如,如果我的列表包含以下项目:C# 需要LINQ查询来查找字符串项,c#,linq,C#,Linq,我有一个列表,其中存储了一个名为Name的属性在类中的NameClass项集合。我试图做的是编写一个Linq查询,它将提取所有以Jones开头的名字,但前提是出现3次或更多。例如,如果我的列表包含以下项目: Name ----------- Jones Jonestown Smith Hector Jones Smith Smith 我正在寻找一个C函数,可以这样调用: GetNames("Jones"); 它应该返回: Jones Jonestown Jones Smith Smith
Name
-----------
Jones
Jonestown
Smith
Hector
Jones
Smith
Smith
我正在寻找一个C函数,可以这样调用:
GetNames("Jones");
它应该返回:
Jones
Jonestown
Jones
Smith
Smith
Smith
如果我运行这个:
GetNames("Smith");
GetNames("Hector");
它应返回:
Jones
Jonestown
Jones
Smith
Smith
Smith
如果我运行这个:
GetNames("Smith");
GetNames("Hector");
它应该不返回任何内容,因为Hector不在列表中3次或更多次
如果您能帮助编写此LINQ查询,我们将不胜感激 我想你在找这样的东西,是吗
string searchString = "Jones";
string lowerSS = searchString.ToLower();
List<NameClass> nameClasses;
var results = nameClasses.Where(nc => nc.Name.ToLower().StartsWith(lowerSS));
if(results != null && results.Count() >= 3)
{
return results;
}
else
{
return null;
}
public static IEnumerable<NameClass> GetNames(IEnumerable<NameClass> 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);
我想你在找这样的东西,是吗
public static IEnumerable<NameClass> GetNames(IEnumerable<NameClass> 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);
如果您不需要在一个查询中完成所有操作,则此扩展方法应该可以:
public static IEnumerable<string> GetNames(this IEnumerable<string> list, string prefix, int minOccurences)
{
var res = list.Where(x => x.StartsWith(prefix));
return res.Count() >= minOccurences ? res : new string[0];
}
如果您不需要在一个查询中完成所有操作,则此扩展方法应该可以:
public static IEnumerable<string> GetNames(this IEnumerable<string> list, string prefix, int minOccurences)
{
var res = list.Where(x => x.StartsWith(prefix));
return res.Count() >= minOccurences ? res : new string[0];
}
你试过这个吗
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<NameClass>();
}
你试过这个吗
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<NameClass>();
}
一行:
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();
}
一行:
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();
}
如果这是作业,请在作业上加上标签。无意冒犯OP,但他看起来肯定不像照片中的小学生-世界上有很多家庭作业。这个问题的表述方式看起来更像是一项学术任务,而不是现实世界。有时候,很难判断什么时候有人在请求家庭作业帮助,什么时候提供一个简单易懂的场景。OP拥有5300的声誉,我应该更清楚,但我在查看@icemanind的代表之前输入了评论。如果这是家庭作业,请用家庭作业标记。对OP没有冒犯,但他看起来肯定不像照片中的小学生-世界上有很多家庭作业。这个问题的表述方式看起来更像是一项学术任务,而不是现实世界。有时候,很难判断什么时候有人在请求家庭作业帮助,什么时候提供一个简单易懂的场景。OP有5300的声誉,我本应该知道得更清楚,但我在查看@icemanind的代表之前输入了评论。我喜欢你获得结果的方式。可能会执行以下操作:返回结果。计数>=3?结果:新名单;当你们有太多的事情要做的时候,比如检查结果是否也可以为空,而不是if-Elsee,然后把所有的东西都放在一行会让事情变得不可读。我们经常处理庞大的代码库,更加详细会有所帮助。返回一个空列表只是浪费资源,我宁愿让自己期望“null”结果,因为这通常是一种更好的做法?运营商肯定有它的位置,我经常使用它。我喜欢你得到结果的方式。可能会执行以下操作:返回结果。计数>=3?结果:新名单;当你们有太多的事情要做的时候,比如检查结果是否也可以为空,而不是if-Elsee,然后把所有的东西都放在一行会让事情变得不可读。我们经常处理庞大的代码库,更加详细会有所帮助。返回一个空列表只是浪费资源,我宁愿让自己期望“null”结果,因为这通常是一种更好的做法?运营商肯定有它的位置,我经常使用它。