Wpf Linq与可观测采集

Wpf Linq与可观测采集,wpf,linq,observablecollection,entityset,Wpf,Linq,Observablecollection,Entityset,我的WPF应用程序中的Linq和ObservableCollections有问题 问题的背景: 我创建了一个非常简单的SQL数据库,其中包含两个表:User和BankAccounts。 用户表与BankAccounts表具有一对多关系。接下来,我创建了LINQtoSQL数据类,它工作得很好==>两个表之间的关联也被检测到 接下来,我创建了一个函数来检索所有正常工作的用户: DataClassesDataContext dc = new DataClassesDataContext var qu

我的WPF应用程序中的Linq和ObservableCollections有问题

问题的背景:

我创建了一个非常简单的SQL数据库,其中包含两个表:User和BankAccounts。 用户表与BankAccounts表具有一对多关系。接下来,我创建了LINQtoSQL数据类,它工作得很好==>两个表之间的关联也被检测到

接下来,我创建了一个函数来检索所有正常工作的用户:

DataClassesDataContext dc = new DataClassesDataContext

var query = from u in dc.Users
            select u;
现在假设我想为每个用户添加一个新的银行帐户(可能性不大,但仍然如此)。 我可以添加以下代码

for each(User u in query)
{
   u.BankAccounts.Add(New BankAccount());
}
以上都很好。由于数据库和Linq数据类中的关联,BankAccounts属性自动成为用户类的一部分

然而,在我的应用程序中,我首先将查询结果添加到ObservableCollection。因此,我可以使用各种数据绑定和变更通知。这是通过以下代码实现的

ObservableCollection<User> oUsers = new ObservableCollection<User>(query);
不知何故,当queryresults被添加到observablecollection时,就不可能再访问user.BankAccounts属性了。但是,可以将BankAccounts属性绑定到任何控件,如列表框,并且它包含正确的数据

现在有人知道我如何创建一个ObservableCollection(或类似的集合),从中我可以访问这些“关联”属性吗?我真的很期待一个解决办法

提前谢谢! 致以最良好的祝愿

巴斯泽里斯酒店
E:巴斯。Zweeris@Capgemini.com

跟踪原始的
查询
,该查询将实现IQueryable,您可以针对该查询运行任何进一步的查询

ObservaleCollection应该只是让WPF绑定到某个对象上——如果您想添加一个新的集合项,而不是在用户有机会编辑它之前将其推送到数据库,那么它非常有用

例如

//创建新的空白客户端类型
var ct=new ClientType()
{
IsArchived=错误,
Description=“”,
Code=“CT000”,
CanLoginOnline=true
};
//告诉数据源跟踪此对象
db.ClientTypes.InsertOnSubmit(ct);
//还可以将对象添加到可观察的集合中,以便可以立即在UI中显示并编辑它,而无需点击db
clienttypes.Add(ct);
for each(User u in oUsers)
{
   u.BankAccounts.Add(New BankAccount());
}
// Create a new blank client type
var ct = new ClientType()
{
    IsArchived = false,
    Description = "<new client type>",
    Code = "CT000",
    CanLoginOnline = true
};

// Tell the data source to keep track of this object
db.ClientTypes.InsertOnSubmit(ct);

// Also add the object to the observable collection so that it can immediately be shown in the UI and editted without hitting the db
clienttypes.Add(ct);