GroupBy Linq与Where Criteria

时间:2014-05-27 10:27:24

标签: c# linq group-by where

我有一个像这样的对象数组;

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" });

当我搜索&#34; john,mark&#34; (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();

任何帮助都会节省我的一天,谢谢!

2 个答案:

答案 0 :(得分:1)

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

如果以逗号分隔格式输入 string ,则只需Split

以下是fiddle

答案 1 :(得分:0)

取决于我的需求,例如我必须得到不是键/值的对象我改变了你的答案;

var result = names
             .Where(o => o.Select(p => p.Name).SequenceEqual(includedNames))
             .Select(g => g.First())
             .ToArray();

感谢您的所有帮助!