降序排序与多重比较

时间:2015-04-08 12:04:49

标签: c# linq

我想通过多次比较来订购结果,例如(付费用户,更新日期,创建日期)

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年之前的明智。我想得到的确切顺序如下

  • 订购用户
  • 更新用户
  • 创建用户

请帮我解决这个问题。希望我能得到正确的结果。

1 个答案:

答案 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)