【问题标题】:GroupBy Linq with Where CriteriaGroupBy Linq 与 Where 条件
【发布时间】:2014-05-27 10:27:24
【问题描述】:

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

public class Test
{
    public string Name {get; set;}
    public string URL {get; set;}
}

我有不同的名称但相同的 URL 地址。 当我使用字符串数组搜索名称条件时,我想获得不同的对象,其中名称对于相同的 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();

任何帮助都会挽救我的一天,已经谢谢了!

【问题讨论】:

  • 是包含单词单个字符串还是数组?
  • 我认为是错字,() 与您的班级名称。
  • 很抱歉我的错过,我必须提前离开办公室,所以很抱歉耽搁了。

标签: c# linq group-by where


【解决方案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();

如果您以逗号分隔格式输入字符串,则只需Split即可。

这里是fiddle

【讨论】:

  • 实际上我使用了一个数组作为包含的名称,这样就没有问题了。我会试试这个并尽快给你回复:) 已经谢谢了!
【解决方案2】:

取决于我的需要,例如我必须从非键/值中获取对象,我这样更改了您的答案;

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

感谢您的所有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多