2013-01-11 45 views
0
var sourceId = 
      (from workstation in db.station 
      join letter in db.letter on workstation.id equals letter.Site_Id 
      where ThatDate < DateTime.Now.AddYears(-1) 
      select workstatio).ToList(); 

這會產生一個列表,它將打印出重複如果不止一個,我該如何使用.distinct?與LINQ不同

請指教,謝謝

+2

可能的重複[LINQ不同的類項目?](http://stackoverflow.com/questions/1930654/linq-distinct-on-class-item) –

+0

我假設工作站:信是一對多的嗎? – IronMan84

回答

0
var sourceId = 
      (from workstation in db.station 
      join letter in db.letter on workstation.id equals letter.Site_Id 
      where ThatDate < DateTime.Now.AddYears(-1) 
      select workstation).Distinct().ToList(); 

看看這個

http://msdn.microsoft.com/en-us/library/bb338049.aspx

+0

這將無法正常工作,因爲它會比較對象指針並決定它們都是不同的對象 – David

+0

然後,您將需要執行如下操作:http://msdn.microsoft.com/en-us/library/bb338049。 ASPX –

0

你可能想在MoreLinq看看DistinctBy方法。你可以在哪裏傳遞一個lambda表達式作爲參數。

在你的榜樣,將類似於這樣:

var sourceId = 
     (from workstation in db.station 
     join letter in db.letter on workstation.id equals letter.Site_Id 
     where ThatDate < DateTime.Now.AddYears(-1) 
     select workstatio).DistinctBy(ws => ws.Id).ToList(); 

您還可以使用DistinctBy具有多個屬性:

var sourceId = 
     (from workstation in db.station 
     join letter in db.letter on workstation.id equals letter.Site_Id 
     where ThatDate < DateTime.Now.AddYears(-1) 
     select workstatio).DistinctBy(ws => new {Id = ws.Id, OtherProperty = ws.OtherProperty}).ToList(); 

順便說一句,而不是參考比較,匿名平等類型實例是通過比較其每個屬性來確定的。

我最近在Anders Hejlsberg本人建議解決此問題的方法中發現了一個有趣的討論。你可以閱讀它here.