下面的场景的C#LINQ声明

时间:2016-08-24 02:14:31

标签: c# linq

我正在尝试构建一个LINQ语句,用于在C#中加入以下两个列表。

的List1:

FormID  FormRound
2        1
2        2
2        3
3        1
4        2

列表2:

FormID  FormRound   Category    Date
2           1        Test1     23-Aug
2           1        Test2     24-Aug
2           1        Test3     25-Aug
2           2        Test1     26-Aug
2           2        Test3     27-Aug
3           1        Test1     28-Aug
3           1        Test2     29-Aug
3           1        Test3     30-Aug

我应该得到如下输出。

FormID  FormRound   Test1Date   Test2Date   Test3Date
2          1          23-Aug    24-Aug       Test3
2          2          26-Aug    NA           27-Aug
3          3          28-Aug    29-Aug       NA

任何人都可以帮我构建LINQ声明吗?

1 个答案:

答案 0 :(得分:0)

此LINQ查询可能如下所示:

var results = (from a in list1
               join b in list2 on new { a.FormId, a.FormRound } equals new { b.FormId, b.FormRound }
               group b by new { a.FormId, a.FormRound } into c
               select new 
               {
                   c.Key.FormId,
                   c.Key.FormRound,
                   Test1Date = c.Where(d => d.Category == "Test1").Select(e => e.Date).FirstOrDefault(),
                   Test2Date = c.Where(d => d.Category == "Test2").Select(e => e.Date).FirstOrDefault(),
                   Test3Date = c.Where(d => d.Category == "Test3").Select(e => e.Date).FirstOrDefault(),
               });

使用您的样本数据生成:

2   1   23-Aug  24-Aug  25-Aug
2   2   26-Aug  null    27-Aug
3   1   28-Aug  29-Aug  30-Aug

这不完全是您的预期结果,但我认为根据我对您问题的评论,您对所期望的内容存在一些问题。