帮助linq查询选择每个日期只有一个值的项目的对象。因此,在下面的列表中:
1) 2011-1-4会被选中,因为它的项目都是25
2) 2011-1-1不会被选中,因为它有22和25项
3) 2011-1-2和2011-1-3将被选中,因为它们只有一个项目。
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 } },
};
}那这个呢?很大程度上是通过看你们的答案得到的。
var results = classes.GroupBy(m => m.date);
var q = from n in results where n.All( r => r.item == n.First().item) select n;发布于 2011-07-06 23:05:06
这是我通过Linqpad运行的一些未经编辑的丑陋代码,似乎符合您的要求。
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。
发布于 2011-07-06 22:54:15
var results = classes
.GroupBy(m => m.date)
.Where(g => g.Select(x => x.item).Distinct().Count() == 1)
.Select(g => g.Key).ToList();发布于 2011-07-06 23:16:23
这似乎是有效的,但我不会说我对它感到满意:
var results = from m in classes
group m by new { m.date } into x
where x.GroupBy(y => y.item).Count() == 1
select x;https://stackoverflow.com/questions/6598404
复制相似问题