2010-10-29 55 views
0

我没有太多编程经验。我正在(学习)一个项目。我正在使用EF(SQLite)C#4.0和WPF 4。我遇到了LINQ问题。来自EF麻烦的C#,Linq数据

这里是有问题的代码(我希望这是不够的,让我知道,如果需要更多)

 private void cboSelectCompany_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     using (ShippingEntities context = new ShippingEntities()) 
     { 
      var companies = from company in context.Deliveries 
          where company.State == cboSelectCompany.SelectedItem.ToString() 
          select company; 

      txtDeliveryName.Text = companies.Name; 
      txtDeliveryState.Text = companies.State; 
     } 

最后两行不工作。我误解了LINQ返回的内容吗?我刚刚得到这个错误

Error 5 'System.Linq.IQueryable<SqliteDemo.Delivery>' does not contain a definition for 'State' and no extension method 'State' accepting a first argument of type 'System.Linq.IQueryable<SqliteDemo.Delivery>' could be found (are you missing a using directive or an assembly reference?) c:\users\dan\documents\visual studio 2010\Projects\SqliteDemo\SqliteDemo\DeliveryCompanies.xaml.cs 49 51 SqliteDemo 

如果任何人都可以给我一些指点还是一个很好的参考我将不胜感激

回答

2

你很近!

Linq正在返回尚未执行的可交付的一组交货。基于阅读你的代码的猜测是,你最多只需要一个结果,然后你想把这些值放到某种用户界面中。在这种情况下,你会想要做的是:

  1. 把你的IQueryable并执行它
  2. 确保你抢第一(或者强制执行,只有一个)排
  3. 设置UI中的适当值。

所以,离开与查询有行,再剩下的改变是这样的:

var company = companies.FirstOrDefault(); 
txtDeliveryName.Text = company.Name; 
txtDeliveryState.Text = company.State; 

插入空检查酌情去,去看看首先,FirstOrDefault之间的差异,Single和SingleOrDefault来查看哪一个看起来对您的特定情况最为正确。

+0

谢谢,这解决了它! – 2010-10-29 07:21:42

0

嗯,貌似companies.State不能编译,因为companies是(的SqliteDemo.Delivery列表而不仅仅是一个SqliteDemo.Delivery)。

你想实现什么?想象一下,你的LINQ查询返回几个结果,这有可能吗?

+0

首先,组合框中填充了交付给公司的状态。然后,当用户更改组合框索引时,根据所选组合框的值填充姓名,地址,城市,州填写的texboxes。 – 2010-10-29 07:22:39

0

只需使用companies.FirstOrDefault()companies.Single()来访问第一个项目,因为默认情况下,LINQ返回的不仅仅是单个项目的集合。