我有一点问题。目前,我正在尝试使用linq查询动态订单。
我想在linq中实现的SQL查询
select * from tbl
order by case when Location='Loc9787f85b-c953-4238-8bad-f712b6444443' then 1
when Location='Loc9787f85b-c953-4238-8bad-f712b6444442' then 2 end
检索位置值并将其保存在列表中。它可以是一个或多个值。
此解决方案似乎适用于静态位置值。由于我动态检索位置值,我不知道如何实现动态位置值。
var temp = tbl.OrderBy(t => t.Location== 'Loc9787f85b-c953-4238-8bad-f712b6444443' ?
1 : (t.Location== 'Loc9787f85b-c953-4238-8bad-f712b6444442' ? 2 : 3))
我将使用这段代码检索位置:
List<String> Location = CustomerService.GetAllLocation();
我正在尝试使用此列表值进行排序。是否可以通过使用包含列值的列表来实现动态顺序?
答案 0 :(得分:0)
而是将逻辑推送到类似的方法:
var temp = tbl.OrderBy(t => GetOrder(t));
public int GetOrder(LocationObject t)
{
int returnValue = 0;
if (t.Location== "Loc9787f85b-c953-4238-8bad-f712b6444443")
{
returnValue = 1;
}
else if (t.Location == "Loc9787f85b-c953-4238-8bad-f712b6444442")
{
returnValue = 2;
}
else
{
returnValue = 3;
}
return returnValue;
}
答案 1 :(得分:0)
使用
List<String> locations = CustomerService.GetAllLocation();
var ordered = tbl.OrderBy(t => locations.Contains(t.Location) ? 0 : 1);
或者,如果索引应代表优先级:
var ordered = tbl
.Where(t => locations.Contains(t.Location))
.ToList() //because List.IndexOf is not supported in LINQ-TO-SQL
.OrderBy(t => locations.IndexOf(t.Location));