我希望能够在组合框中更改选择后再次枚举查询。它目前正在发挥作用,但必须有更好的方法。
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;
}
答案 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
。