Linq查询以下数据

时间:2017-07-06 08:53:16

标签: c# linq c#-4.0

id  vid Amount  Date
a   1   10  Today
a   1   5   Yesterday
b   2   6   Today
b   2   7   Yesterday   

如何使用linq获取记录,其中每个vid组bi Id和vid的今天金额大于昨天?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你的课程就像这样:

class Data
{
    public string Id;
    public int Vid;
    public int Amount;
    public DateTime Date;
}

此类的实例的枚举,其中包含多个共享相同Vid值但具有不同AmountDate值的实例。您想要的是使所有其他实例的DateAmount值同时具有相同Vid的所有实例。完成后,您希望按IdVid

对结果进行分组

在这种情况下,您需要以下查询:

var myList = new List<Data>();
var result = myList.SelectMany(d1 => myList.Where(d2 => d2.Vid == d1.Vid && d1.Amount < d2.Amount && d1.Date < d2.Date)).OrderBy(data => data.Vid).ThenBy(data => data.Id).ToList();

我们在这里做的是:

  • 遍历myList中的所有元素。
    • 对于每个元素,查找具有相同Vid但更大DateAmount的所有其他元素。
  • 使用SelectMany将所有结果展平为单个集合。
  • Vid排序生成的枚举,然后按Id
  • 排序
  • 将结果转换为列表。