2016-07-21 66 views
1

我有LINQ的顯示排序LIDT

  • VehicleID
  • VehicleName

名單車輛模型數據庫

  • 奧迪
  • Hyndai
  • Toyot一個
  • Marcedes
  • 其他
  • 的Accura
  • 斯巴魯
  • 本田

我已經使用了這樣的事情過去。在視圖中對列表的順序進行排序。

@ {var veh =(IEnumerable)ViewBag.Vehicles; veh = veh.OrderByDescending(v => v.Name!=「Other」)。ThenBy(v => v.Name);}

現在我想按照以下順序顯示結果。

  • 奧迪
  • Hyndai
  • Marcedes
  • 豐田
  • 的Accura
  • 斯巴魯
  • 本田
  • 其他

按「排序」字母順序排列「其他」跟在左邊列表之前的列表。最後與「其他」

我希望我能解釋得更好。任何幫助深表感謝。感謝

+0

你的意思**前**和** **後「其他「?基於什麼 - 'VehicleID'或? –

+0

基於VehicleName –

+0

我不明白。基於'VehicleName',你怎麼知道**之前的**和**之後的** **其他?看看你的數據庫中的列表。既然它不是按名字排序的,那麼它是如何訂購的?必須有一些其他財產或東西。 –

回答

1
@{var veh = (IEnumerable<Vehicle>)ViewBag.Vehicles; veh = veh.OrderByDescending(v => v.Name != "Other").ThenBy(v => Convert.ToInt32(v.IsActive)==0).ThenBy(v=>v.Name);} 
@foreach (Vehicle v in veh) 
{ 
<div class="col-xs-4"> 
    <input type="checkbox" name="VehicleId" value="@v.VehicleId" id="@v.VehicleId" /> 
    <span for="@v.VehicleId">@v.Name</span><br /> 
</div> 

         } 
0

這通過在查詢中使用一個外部變量欺騙了一點,但它的工作原理..

var cars = new string[] {"Audi", "Hyndai", "Toyota", "Marcedes", 
         "Other", "Accura", "Subaru", "Honda"}; 

int seen = 0; 
var list = from car in cars 
      let order = (car=="Other") ? seen=2 : (seen==2 ? 1 : 0) 
      orderby order, car 
      select car; 

list.Dump();