簡體   English   中英

Linq-To-Sql,MVC,具有不同查詢的可枚舉結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM