首页 > 解决方案 > C# linq IQueryable 多重过滤

问题描述

我找不到如何使用 LINQ 进行多重过滤的方法。

我想做的事:

1.过滤版本(已实现)

2.过滤公司名称(过滤/删除重复)

3.获取最新时间戳

4.然后将所有内容添加到列表中。

到目前为止,这是我编写的代码(不起作用)。

public List<ReleaseStatistics> GetReleaseStatistics(IQueryable<InstallationInformation> input, IQueryable<DBContext.Version> mapping)
        {
            List<ReleaseStatistics> Releasestats = new List<ReleaseStatistics>();            
            foreach (var version in mapping)
            {
                IQueryable<InstallationInformation> QueryResult1 = input.Where(x => x.ProductVersion == version.VersionNumber);
 
                IQueryable<InstallationInformation> QueryResult2 = QueryResult1.GroupBy(x => x.CompanyName).SelectMany(y => y);

                List<InstallationInformation> ListofInstallationInformation = QueryResult2.ToList<InstallationInformation>();


                if (ListofInstallationInformation.Count >= 1)
                {
                    Releasestats.Add(new ReleaseStatistics
                    {
                        ReleaseVersion = version.ReleaseName,
                        CustomerCount = QueryResult1.Where(x => x.ProductVersion == version.VersionNumber).Count()
                    });
                }
            }  

            return Releasestats;
        }

补充资料:

问题之一是存在重复项,我想过滤/删除它们,但我想获取每个 CompanyName 的最新时间戳,然后将其添加到列表中。

在此处输入图像描述

标签: c#linq

解决方案


问题是这条线

IQueryable<InstallationInformation> QueryResult2 = QueryResult1.GroupBy(x => x.CompanyName).SelectMany(y => y);

实际上什么都不做。

假设 QueryResult1 是

公司名称 | F1 | F2 |

CN1 | f1a | f2a |

CN1 | f1a | f2a |

CN2 | f1b | f2b |

那么 QueryResult1.GroupBy(x => x.CompanyName) 是

集团 | 数据


CN1 | 公司名称 | F1 | F2 |

     CN1          |  f1a | f2a |

     CN1          |  f1a | f2a |

CN2 | 公司名称 | F1 | F2 |

     CN2          |  f1b | f2b |

然后 QueryResult1.GroupBy(x => x.CompanyName).SelectMany(y => y); 又是

公司名称 | F1 | F2 |

CN1 | f1a | f2a |

CN1 | f1a | f2a |

CN2 | f1b | f2b |

你想做的可能是

var QueryResult2 = QueryResult1.GroupBy(x => x.CompanyName).Select(y => new {CompanyName = y.Key, MaxTimestamp = y.Max(z => z.TimeStamp)});

推荐阅读