刷新组合框选择的 LINQ 查询已更改
Refreshing LINQ query on ComboBox Selection Changed
我希望能够在组合框中的选择更改后再次枚举查询。它目前正在运行,但必须有更好的方法。
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;
}
如果我没理解错的话,您想将数据访问逻辑移到单独的 file/class 中吗?如果是这种情况,您可以使用存储库模式而不是使用普通的旧 link 查询。
下面是一个使用 EntityFramework 的例子:http://www.codeproject.com/Articles/207820/The-Repository-Pattern-with-EF-code-first-Dependen
如果您正在寻找更流畅的语法...您可以使用这个:
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
});
class CustomerAddress
需要有一个导航 属性 引用 Customer
class 和一个导航 属性 到 Address
,您还需要 CustomerAddress
的集合作为 Address
上的导航 属性,例如ICollection<CustomerAddress>
.
除此之外,我会将所有代码迁移到一个单独的项目中。无论您的用户在哪里与您的网站交互,该层都是表示层问题,因此无论您的应用程序是使用 WinForms、WPF 还是 ASP.NET 开发的,该项目都应该只处理与用户体验、数据表示有关的问题它公开和验证有关输入值、错误消息等。
数据访问逻辑,您在上面编写的逻辑应该在一个单独的逻辑中...您的表示层可以从中请求内容。
我强烈建议您开始研究 N-Tier architecture
以正确构建应用程序。
我还建议您考虑使用 Entity Framework
。
我希望能够在组合框中的选择更改后再次枚举查询。它目前正在运行,但必须有更好的方法。
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;
}
如果我没理解错的话,您想将数据访问逻辑移到单独的 file/class 中吗?如果是这种情况,您可以使用存储库模式而不是使用普通的旧 link 查询。
下面是一个使用 EntityFramework 的例子:http://www.codeproject.com/Articles/207820/The-Repository-Pattern-with-EF-code-first-Dependen
如果您正在寻找更流畅的语法...您可以使用这个:
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
});
class CustomerAddress
需要有一个导航 属性 引用 Customer
class 和一个导航 属性 到 Address
,您还需要 CustomerAddress
的集合作为 Address
上的导航 属性,例如ICollection<CustomerAddress>
.
除此之外,我会将所有代码迁移到一个单独的项目中。无论您的用户在哪里与您的网站交互,该层都是表示层问题,因此无论您的应用程序是使用 WinForms、WPF 还是 ASP.NET 开发的,该项目都应该只处理与用户体验、数据表示有关的问题它公开和验证有关输入值、错误消息等。
数据访问逻辑,您在上面编写的逻辑应该在一个单独的逻辑中...您的表示层可以从中请求内容。
我强烈建议您开始研究 N-Tier architecture
以正确构建应用程序。
我还建议您考虑使用 Entity Framework
。