2016-07-21 42 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();