[英]Linq-To-Sql, MVC, Enumerable results with Distinct query
我是.Net C#的新手,我真的不知道我做錯了什么。 我有一個LinqToSql DataContext,我正在從中繪制不同的結果,但是我不確定如何在我的視圖中正確輸出結果。 我的視圖上出現編譯錯誤(Compiler Error Message: CS1002: ; expected)
。
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>
您缺少等號:
<% Html.Encode(Store.state) %>
應該
<% =Html.Encode(Store.state) %>
提供更多的解釋。 如果您呼叫的一個Html
擴展方法,你需要或者等號前綴它=
或冒號:
因為要顯示這些方法輸出相應的HTML字符串。 當你這樣做,你不要用分號追加你的發言。
如果要調用的方法不直接返回HTML字符串,則就像常規C#方法一樣調用它,在這種情況下,將需要使用分號。
記住何時開始使用MVC時,記住何時使用等號和何時使用分號可能會使您有點失望。
您的View模型是字符串的集合,而不是存儲對象。 所以當你做的時候
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();
}
這將在狀態列表而不是每個狀態字符串上執行Distinct()。
您需要repo.GetStoreStates().ToList()
。 沒有它,您將嘗試將IQueryable
作為模型傳遞,這實際上是尚未運行的查詢。 要運行查詢,您需要調用ToList()
,這將導致查詢運行並返回List<type>
,然后可以循環遍歷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.