首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linq to objects查询:选择不存在其他值的对象

linq to objects查询:选择不存在其他值的对象
EN

Stack Overflow用户
提问于 2011-07-06 22:50:39
回答 3查看 249关注 0票数 0

帮助linq查询选择每个日期只有一个值的项目的对象。因此,在下面的列表中:

1) 2011-1-4会被选中,因为它的项目都是25

2) 2011-1-1不会被选中,因为它有22和25项

3) 2011-1-2和2011-1-3将被选中,因为它们只有一个项目。

代码语言:javascript
运行
复制
    public class MyClass
    {
        public DateTime date { get; set; }
        public int item { get; set; }
    }
    static void Main(string[] args)
    {
        List<MyClass> classes = new List<MyClass> 
        {
        { new MyClass() { date = new DateTime(2011, 1, 1), item = 22 } },
        { new MyClass() { date = new DateTime(2011, 1, 1), item = 25 } },
        { new MyClass() { date = new DateTime(2011, 1, 2), item = 23 } },
        { new MyClass() { date = new DateTime(2011, 1, 3), item = 24 } },
        { new MyClass() { date = new DateTime(2011, 1, 4), item = 25 } },
        { new MyClass() { date = new DateTime(2011, 1, 4), item = 25 } },
        };
    }

那这个呢?很大程度上是通过看你们的答案得到的。

代码语言:javascript
运行
复制
            var results = classes.GroupBy(m => m.date);
        var q = from n in results where n.All( r => r.item == n.First().item) select n;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-06 23:05:06

这是我通过Linqpad运行的一些未经编辑的丑陋代码,似乎符合您的要求。

代码语言:javascript
运行
复制
var query = classes.GroupBy(c => c.date)
                   .Select(g => g.GroupBy(c => c.item))
                   .Where(sg => sg.Count() == 1)
                   .SelectMany(sg => sg)
                   .SelectMany(g => g)
                   .Select(c => c.date)
                   .Distinct();

根据您的要求返回日期1/2、1/3和1/4。

票数 0
EN

Stack Overflow用户

发布于 2011-07-06 22:54:15

代码语言:javascript
运行
复制
var results = classes
         .GroupBy(m => m.date)
         .Where(g => g.Select(x => x.item).Distinct().Count() == 1)
         .Select(g => g.Key).ToList();
票数 0
EN

Stack Overflow用户

发布于 2011-07-06 23:16:23

这似乎是有效的,但我不会说我对它感到满意:

代码语言:javascript
运行
复制
var results = from m in classes
              group m by new { m.date } into x
              where x.GroupBy(y => y.item).Count() == 1
              select x;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6598404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档