刷新ComboBox选择的LINQ查询已更改

时间:2015-07-13 18:23:40

标签: c# linq datagrid combobox

我希望能够在组合框中更改选择后再次枚举查询。它目前正在发挥作用,但必须有更好的方法。

var cmbBox = (from c in db.Addresses
                      select c.City).Distinct();

        cmbQ2.ItemsSource = cmbBox;

        #endregion
    }

    private void cmbQ2_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var q2 = from c in db.Customers
                 join ca in db.CustomerAddresses on c.CustomerID equals ca.CustomerID
                 join a in db.Addresses on ca.AddressID equals a.AddressID
                 where a.City == (string)cmbQ2.SelectedValue
                 select new { Name = c.FirstName, City = a.City };

        lbxQ2.ItemsSource = q2;
    }

Using the combo box at the bottom of the window

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您想将数据访问逻辑移到单独的文件/类中吗?如果是这种情况,您可以使用存储库模式,而不是使用普通的旧链接查询。

以下是使用EntityFramework的示例:http://www.codeproject.com/Articles/207820/The-Repository-Pattern-with-EF-code-first-Dependen

答案 1 :(得分:0)

如果您正在寻找更流畅的语法......您可以使用它:

string selectedCity = (string)cmbQ2.SelectedValue;
var query = db.Addresses.Where(address => address.City == selectedCity)
                        .SelectMany(address => address.CustomerAddresses)
                        .Select(customerAddress => new 
                        {
                            Name = customerAddress.Customer.FirstName,
                            City = customerAddress.Address.City
                        });

CustomerAddress需要有一个引用Customer类的导航属性和一个Address的导航属性,你还需要一个CustomerAddress的集合作为Address上的导航属性,例如ICollection<CustomerAddress>

除此之外,我还将所有代码迁移到一个单独的项目中。用户与您的站点进行交互时,该层是表示层关注的问题,因此,无论您的应用程序是使用WinForms,WPF还是ASP.NET开发,该项目都应该只处理有关用户体验的问题,它所公开的数据的呈现方式和输入值,错误消息等的验证。

数据访问逻辑,你上面写的逻辑应该是一个单独的...你的表示层可以从中请求内容。

我强烈建议您开始考虑N-Tier architecture正确构建应用程序。

我还建议你研究一下Entity Framework