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();

任何帮助都将拯救我的一天,谢谢!

GroupBy Linq with Where Criteria

尝试为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();

谢谢你的帮助!