我想通过多次比较来订购结果,例如(付费用户,更新日期,创建日期)。
var order = _vrepository.Details()
.Where(od => od.Order.Id != null
&& od.PlanName.ToLower().Contains("DP".ToLower())
&& od.Order.Status == true)
.OrderByDescending(od => od.ValidityTill)
.Select(ord => ord.Order.Id.Value);
以上我得到了付费用户。
var updatedList = _repository.GetUsers()
.Where(c => c.UpdatedDate != null
&& fresh <= c.UpdatedDate)
.Select(c => c.Id);
第二个查询我正在更新用户。
var UsersListByCreatedDate = _repository.GetUsers()
.Where(c => fresh <= c.CreatedDate)
.Select(c => c.Id);
第三个是按创建日期获取用户。然后我选择了Id(整数)
lstId = order.ToList();
lstUpdatedUsersId = updatedList ToList();
lstCreatedDatewiseUsers = UsersListByCreatedDate.ToList();
为了显示有序列表,我执行了以下代码:
Func<IQueryable<User>, IOrderedQueryable<User>> orderingFunc = query =>
{
if (order.Count() > 0)
return query.OrderByDescending(rslt => lstId .Contains(rslt.Id))
.ThenByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => lstCreatedDatewiseUsers.Contains(rslt.Id));
else
return query.OrderByDescending(rslt => lstUpdatedUsersId .Contains(rslt.Id))
.ThenByDescending(rslt => rslt.UpdatedDate);
};
但我得到的结果是One Paid用户,一些Created用户和日期是3年之前的明智。我想得到的确切顺序如下
请帮我解决这个问题。希望我能得到正确的结果。
答案 0 :(得分:0)
我已根据你的
尝试了这个snipepd代码public class Program
{
public static void Main()
{
var l1= new List<int>{1,2,3};
var l2= new List<int>{4,5,6};
var l3= new List<int>{7,8,9};
var testList = new List<Test>{new Test{Id=9,Name="test1"},new Test{Id=11,Name="test1"},new Test{Id=5,Name="test1"},new Test{Id=7,Name="test1"},new Test{Id=2,Name="test1"}};
var orderedList= testList.OrderByDescending(e=> l1.Contains(e.Id)).ThenByDescending(e=> l2.Contains(e.Id)).ThenByDescending(e=> l3.Contains(e.Id));
Console.WriteLine(string.Join("\t", orderedList.Select(e=> e.Id).Cast<int>().ToArray()));
// it prompts 2 5 9 7 11
}
}
public class Test{
public int Id{get; set;}
public string Name{get; set;}
}
它按预期工作。也许我还没有理解你想要实现的目标。
也许用于对项目进行排序的函数位于if语句的错误分支中,请检查if (order.Count() > 0)