2010-07-29 89 views
0

我對.Net C#非常陌生,我真的不知道我做錯了什麼。我有一個LinqToSql DataContext我正在繪製不同的結果,但我不知道如何在我的視圖中正確輸出結果。在我看來,我收到編譯錯誤(Compiler Error Message: CS1002: ; expected)Linq-To-Sql,MVC,具有不同查詢的可枚舉結果

StoreRepository.cs

public IQueryable<String> GetStoreStates() 
     { 
      return from Store in db.Stores 
        orderby Store.State 
        select Convert.ToString(Store.State.Distinct()); 
     } 

StoresController.cs

public ActionResult StatesIndex() 
     { 
      var states = repo.GetStoreStates().ToList(); 
      return View("StatesIndex", states); 
     } 

StatesIndex.aspx

<ul> 
     <% foreach (var state in Model) 
      { %> 
     <li> 
      <% Html.Encode(state) %> 
     </li> 
     <% } %> 
    </ul> 
+1

你能用文字解釋你想要做什麼嗎? – 2010-07-29 17:00:33

+0

根據他的消息,他在aspx中出現錯誤。回答如下。 – Robaticus 2010-07-29 17:03:50

+0

你對選擇Convert.ToString(Store.State.Distinct())有什麼意義;線?我不是那種你真正想要的東西。 – 2010-07-29 17:40:44

回答

1

您的視圖模型是字符串的集合,而不是存儲對象。 所以,當你在做

foreach(var Store in Model)每個Store只是一個字符串,你不能這樣做Store.state

要麼改變你的GetStoreStates方法返回存儲對象的列表,或者改變您的foreach的內容

<%= Html.Encode(Store) %> 

編輯:評論後更新。

問題是您正試圖對字符串執行Distinct()。如果它已經工作,它只會得到一個字符串中包含不同的字符。

它認爲這是更你想要什麼:

public IQueryable<String> GetStoreStates() 
{ 
    return (from Store in db.Stores 
      orderby Store.State 
      select Store.State).Distinct(); 
} 

這將執行鮮明的()狀態的名單上,而不是對每一個狀態字符串。

+0

謝謝,是的,我發現後,我發現了這個問題。雖然,我現在得到錯誤「序列運算符不支持'System.String'類型'」 – 2010-07-29 17:34:07

+0

你能編輯你的問題並顯示新的代碼嗎?請保留那些舊東西。這也有助於瞭解您的網頁所期待的模型類型。 – Robaticus 2010-07-29 17:37:32

+0

我更新了代碼。控制器現在使用.ToList()並更新視圖,以避免Store對象具有狀態屬性。我試圖完成的是顯示Store實體的狀態屬性的清單。在我的理解中,存儲庫方法提供了按照相同順序排列的不同狀態名稱的查詢結果。控制器將這個對象轉換爲列表,並且視圖輸出這個列表......但是我得到這個錯誤,我不知道爲什麼。 – 2010-07-29 18:09:31

0

你需要repo.GetStoreStates().ToList()。沒有它,你試圖通過一個IQueryable作爲你的模型,這本質上是一個尚未運行的查詢。要運行查詢,您需要調用ToList(),這將導致查詢運行並返回一個List<type>,然後您可以循環。

+0

謝謝。這是肯定的一部分。 – 2010-07-29 17:17:41

2

你缺少等號:

 <% Html.Encode(Store.state) %> 

應該

 <% =Html.Encode(Store.state) %> 

爲了提供更多的解釋。如果您正在調用Html擴展方法之一,則需要使用等號=或冒號:作爲其前綴,因爲這些方法會輸出適當的HTML字符串以進行顯示。當你這樣做時,你不要用分號附加你的語句。

如果您調用的方法不會直接返回HTML字符串,那麼您將它稱爲普通的C#方法,在這種情況下,您將需要分號。

記住什麼時候使用等號以及何時使用分號可能會在您首次使用MVC時傾向於讓您稍微偏離一點。

+0

謝謝!好的,現在我得到了一個不同的錯誤。 「序列運算符不支持類型'System.String'」 – 2010-07-29 17:16:11