0

Statesというテーブルがあり、linqクエリを使用してドロップダウンリストに状態の値を表示しています。ID0の最初の場所に選択を挿入したいと思います。次のクエリを使用してドロップダウンリストを表示しています。

var str = (from li in dbContext.states

               where li.state >= 1
               select new
               {

                   a=li.state

               }).ToArray();

上記のクエリは、私のDBに存在するすべての値を意味します。最初に1つを選択して挿入するにはどうすればよいですか?誰かが方法や構文を提案してください。ありがとう

4

2 に答える 2

0

リストの先頭にアイテムを1つ追加する必要があります。

var str = (from li in dbContext.states

               where li.state >= 1
               select new
               {

                   a=li.state

               }).ToList().Insert(0, "selectone");
于 2012-06-18T10:52:56.253 に答える
0

MajoBの回答を参照してください。

ヘルパーを使用している場合でも@Html.DropDownListFor() 、optionLabelArgumentを使用してId0行を指定することもできます。

public static MvcHtmlString DropDownListFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IEnumerable<SelectListItem> selectList,
    string optionLabel
)

アップデート:

MajoBの例が機能しない理由は、Linqクエリで匿名型を使用しているが、.Insert()ステートメントで文字列を定義しているためだと思います。

.Insert()ステートメントのLINQクエリで使用されたものと同じ匿名型を再利用することはできないと思います。

したがって、通常のタイプを使用する必要があります。

(from x in 
    (from li in dContext.states
    where li.state >= 0
        select new {
            value = li.state,
            text = li.something
        }).AsEnumerable()
    select new SelectListeItem {
        Value = x.value.ToString()
        Text = x.text
    }).ToList().Insert(0, new SelectListItem() { .. });

.ToString()はSQLに変換できないため、ネストされたクエリが必要です。この.AsEnumerable()呼び出しにより、動作するメモリ内リストが作成されまし.ToStringた。

私は実際にコードベースでこのようなExtensionメソッドを使用しています。ただし、 LinqKitが機能する必要があります。

public static IList<SelectListItem> ToSelectList<T>(this IQueryable<T> query
        , Expression<Func<T, long>> value
        , Expression<Func<T, string>> text
        , string nullText = null)
    {
        var result = (from x in
                          (from y in query.AsExpandable()
                           select new
                           {
                               Value = value.Invoke(y),
                               Text = text.Invoke(y),
                           }).AsEnumerable()
                      select new SelectListItem
                      {
                          Value = x.Value.ToString(),
                          Text = x.Text.ToString()
                      }).ToList();

        AddNullText(nullText, result);
        return result;
    }

private static void AddNullText(string nullText, List<SelectListItem> result)
    {
        if (nullText != null)
        {
            result.Insert(0, new SelectListItem()
            {
                Value = "",
                Text = nullText,
            });
        }
    }

(+ Expression<Func<T, string>>2番目のパラメーターとしてなどを使用した同じ拡張メソッド。)

于 2012-06-18T10:56:43.950 に答える