2011-07-01 44 views
2

我有一個gridview,綁定到一個數據源,它的數據庫表包含一個與用作下拉列表數據源的數據庫表關聯的外鍵。在C#中比較兩個數據源

我想要做的是如果某個foreignKeyId存在於gridview.datasource中,將其從dropdownlist.datasource中刪除。

爲了讓我更清楚地知道爲什麼我想要我想要的東西,用戶可以將條目添加到gridview(因此也是數據源),但我不希望用戶能夠製作更多而不是一個特定類型的條目。有沒有一種方法,linq查詢可以做到這一點?

僞代碼(注意,我知道RemoveObjects()是一種無效的方法)

var query = DataContext.Items.Where(item => item.TypeId == selectedTypeId); 
dropDownList.DataSource.RemoveObjects(query); 

這裏是我綁定的下拉列表,所以也許我可以在這裏做一些事情來獲得與項目已經存在的TypeId的?

dropDownList.DataSource = DataContext.Items.Select(items => new 
       { 
        items.Name, 
        items.TypeId, 
       }).ToList(); 

任何建議或答案將是偉大的!

+0

什麼是對象要創建在選擇的時候,你指定數據源的性質是什麼?它看起來像動態類型,但屬性名稱已丟失! –

回答

5

您是否嘗試過使用except

dropDownList.DataSource.Except(query) 
+0

我認爲這將不起作用,因爲綁定到dropDownList的項目是動態類型的,而不是DataContext.Items中的項目類型。所以除了不會工作。 –

+1

@valipour它將取決於默認的相等比較器。也可以實現自己的IEqualityComparer並將其傳入,如果使用除其他選項以外的其他選項。也許你想添加另一個選項 –

+0

我會說數據源項目定義爲一個命名類型(而不是動態),使其更透明,除了明確工作。 –