我已经看到了很多答案 - 但似乎无法使它们发挥作用:
var numinqtoday = bc.SSRecs.Where(x => x.DateTime == id).Select(n => new
{
refer = n.@ref
}).GroupBy(x => x.refer).ToList();
var numinqprev = bc.SSRecs.Where(x => x.DateTime < id).Select(n => new
{
refer = n.@ref
}).GroupBy(x => x.refer).ToList();
var filtered = numinqtoday.Except(numinqprev).ToList();
在上面的代码中:
numinqtoday.Count() = 184
numinqprev.Count() = 155
filtered.Count() = 184
我已经检查过numinqtoday中numinqprev中肯定会发生 - 所以看起来.Except在放入过滤之前没有删除它们。
有人可以告诉我哪里出错了吗?
谢谢,
标记
答案 0 :(得分:8)
您已经在那里找到了群组的列表 - 我怀疑您会发现一个群组永远不会与另一群体相等。我怀疑你想在分组之前执行Except
操作。例如:
var numinqtoday = bc.SSRecs.Where(x => x.DateTime == id).Select(n => new
{
refer = n.@ref
}).ToList();
var numinqprev = bc.SSRecs.Where(x => x.DateTime < id).Select(n => new
{
refer = n.@ref
}).ToList();
var filtered = numinqtoday.Except(numinqprev).GroupBy(x => x.refer).ToList();
另一种选择是创建一组密钥,并使用Where
:
// Code as per your original, including the GroupBy calls. Change the string
// part as per the type of refer, which we don't know...
var keys = new HashSet<string>(numinqprev.Select(g => g.Key));
var filtered = numinqtoday.Where(g => !keys.Contains(g.Key)).ToList();
另请注意,如果您只拥有一个属性,那么使用匿名类型就没什么意义了。