2010-10-29 67 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返回的不僅僅是單個項目的集合。