GroupBy Linq with Where Criteria
本文关键字:Criteria Where with Linq GroupBy | 更新日期: 2023-09-27 18:05:33
我有一个像这样的对象数组;
public class Test
{
public string Name {get; set;}
public string URL {get; set;}
}
我有不同的名称,但相同的URL地址。当我用字符串数组搜索Name条件时,我希望得到不同的对象,其中Name对于相同的url将相等。
例如:var names = new List<Test>();
names.Add(new Test() { Name = "john", URL = "http://www.test.com" });
names.Add(new Test() { Name = "mark", URL = "http://www.test.com" });
names.Add(new Test() { Name = "john", URL = "http://www.test2.com" });
当我搜索"john, mark"(includedWords)时,我只想得到上面例子中的一个结果。
我的测试LINQ是这样的,但它失败了;
var names = names.Select(n => new { URL = n.URL, Name = n.Name })
.GroupBy(o => o.URL)
.Where(g => g.Count() >= includedWords.Length)
.ToArray();
任何帮助都将拯救我的一天,谢谢!
尝试为includedNames
使用数组:
var includedNames = new [] { "john", "mark" };
var result = names
.GroupBy(o => o.URL)
.Where(g => g.Select(x => x.Name).OrderBy(n => n).SequenceEqual(includedNames))
.Select(g => g.Key)
.ToArray();
如果你的输入字符串在逗号分隔格式,那么只需Split
它。
fiddle
取决于我的需要,例如我必须从非键/值中获得对象,我改变了您的答案;
var result = names
.Where(o => o.Select(p => p.Name).SequenceEqual(includedNames))
.Select(g => g.First())
.ToArray();
谢谢你的帮助!