2011-07-01 57 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

我会说数据源项目定义为一个命名类型(而不是动态),使其更透明,除了明确工作。 –