【问题标题】:Linq and ObservableCollectionLinq 和 ObservableCollection
【发布时间】:2009-06-18 15:55:49
【问题描述】:

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

问题背景:

我创建了一个非常简单的 SQL 数据库,其中包含两个表:User 和 BankAccounts。 User 表与 BankAccounts 表具有一对多的关系。接下来我创建了 Linq-to-SQL 数据类,效果很好 ==> 还检测到了两个表之间的关联。

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

DataClassesDataContext dc = new DataClassesDataContext

var query = from u in dc.Users
            select u;

现在假设我想为每个用户添加一个新的 BankAccount(不太可能,但仍然如此)。 我可以添加以下代码

for each(User u in query)
{
   u.BankAccounts.Add(New BankAccount());
}

以上工作一切正常。由于数据库和 Linq DataClasses 中的关联,BankAccounts 属性自动成为 User 类的一部分。

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

ObservableCollection<User> oUsers = new ObservableCollection<User>(query);

问题:在 ObservableCollection 中,我无法对用户的 BankAccounts 属性进行任何操作,因为它现在属于 EntitySet 类型。所以我不能再做下面的陈述了。

for each(User u in oUsers)
{
   u.BankAccounts.Add(New BankAccount());
}

不知何故,当查询结果被添加到 observablecollection 时,就不可能再访问 user.BankAccounts 属性了。但是,可以将 BankAccounts 属性绑定到任何控件,例如列表框,并且它包含正确的数据。

现在有没有人可以创建一个 observableColction(或类似的集合),以便我可以访问这些“关联”属性?我真的很期待一个解决方案。

提前致谢! 最好的问候,

巴斯兹韦里斯 邮箱:Bas.Zweeris@Capgemini.com

【问题讨论】:

    标签: wpf linq observablecollection entityset


    【解决方案1】:

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

    ObservableCollection 应该只是为了让 WPF 有一些东西可以绑定 - 如果你想添加一个新的集合项但在用户有机会编辑它之前没有将它推送到数据库,它非常有用。

    例如。

    // 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2012-05-09
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多