2014-07-07 27 views
2

刪除一個匿名的名單我已經看到了很多答案,這一點 - 但似乎無法讓他們的工作:LINQ的 - 從另一個

var numinqtoday = bc.SSRecs.Where(x => x.DateTime == id).Select(n => new 
     { 
      refer = [email protected] 
     }).GroupBy(x => x.refer).ToList(); 

var numinqprev = bc.SSRecs.Where(x => x.DateTime < id).Select(n => new 
     { 
      refer = [email protected] 
     }).GroupBy(x => x.refer).ToList(); 


var filtered = numinqtoday.Except(numinqprev).ToList(); 

在上面我的代碼:

numinqtoday.Count() = 184 
numinqprev.Count() = 155 

filtered.Count() = 184 

我已經檢查過,numinqtoday中肯定有numinqprev內發生 - 所以它看起來是。除了在過濾之前不刪除它們。

請問誰能告訴我哪裏出錯了?

謝謝

馬克

回答

8

你有組的列表那裏 - 我懷疑你會發現,一組是永遠等於另一個。我懷疑你想在分組之前執行Except操作。例如:

var numinqtoday = bc.SSRecs.Where(x => x.DateTime == id).Select(n => new 
    { 
     refer = [email protected] 
    }).ToList(); 
var numinqprev = bc.SSRecs.Where(x => x.DateTime < id).Select(n => new 
    { 
     refer = [email protected] 
    }).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(); 

還要注意的是,如果你只有一個屬性,沒有多少點使用一個匿名類型。

+0

完美 - 謝謝 - 我會在7分鐘內給你答案 - 歡呼聲,馬克 – Mark

+0

3分鐘,你很快。我仍然在寫我的答案:) –

+0

嗨 - 匿名類型的原因是bc.SSRecs是數據庫中的表 - 它包含的不僅僅是我感興趣的那一列(@ref)。我以爲我必須將這張桌子投影到一張新桌子上,只是包含我感興趣的房產?如果我錯了,我會非常感謝你能否提供進一步的建議?乾杯,馬克 – Mark