2014-06-10 114 views
0

我在下面的代碼中缺少什麼?我想按文本對列表進行排序無法將類型'System.Linq.IOrderedEnumerable <System.Web.Mvc.SelectListItem>'隱式轉換爲'System.Web.Mvc.SelectList'

public SelectList MyList { get; set; } 
MyList = new SelectList(new SelectListItem[] { 
      new SelectListItem { 
       Text = "Select Customer", Value = "", Selected = false 
      } 
     }.Concat(myList.GetAll().Select(x => new SelectListItem { Text = x.Customer.Name + " - " + x.Name, Value = x.ID.ToString() })), "Value", "Text", "0"); 
     MyList = MyList .OrderBy(x => x.Text); 

我在編譯時在最後一行有錯誤。

無法隱式轉換類型 'System.Linq.IOrderedEnumerable' 到 'System.Web.Mvc.SelectList'。一個顯式轉換存在(是否 缺少強制轉換?)

+1

不知道SelectList的構造函數是什麼樣子。 –

+0

@ Dennis_E,[這裏你去](http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v = vs.118).aspx)。 –

+0

@AndreiV:找不到內容 – learning

回答

0

您正在嘗試排序SelectList對象,因爲它是一個列表。對SelectList進行排序。您可能想要排除排序中的第一個:

MyList = new SelectList(
    new SelectListItem[] { 
    new SelectListItem { 
     Text = "Select Customer", Value = "", Selected = false 
    } 
    }.Concat(
    myList.GetAll() 
     .Select(x => new SelectListItem { Text = x.Customer.Name + " - " + x.Name, Value = x.ID.ToString() }) 
     .OrderBy(x => x.Text) 
), "Value", "Text", "0"); 
0

只需推動OrderBy構造函數的參數內。實際上,您可能希望將第一個元素保留在列表的開頭,因此OrderBy應該應用於Concat之內。另外,我還重構了代碼,使其比較容易明白是怎麼回事:

var items = myList 
    .GetAll() 
    .Select(
    x => new SelectListItem { 
     Text = x.Customer.Name + " - " + x.Name, 
     Value = x.ID.ToString() 
    } 
) 
    .OrderBy(x => x.Text); 

var itemsWithInitialItem = new SelectListItem[] { 
    new SelectListItem { 
     Text = "Select Customer", Value = "", Selected = false 
    } 
    } 
    .Concat(items); 

MyList = new SelectList(itemsWithInitialItem, "Value", "Text", "0"); 
相關問題