【发布时间】:2020-07-10 17:40:40
【问题描述】:
我找不到使用 LINQ 进行多重过滤的方法。
我想做什么:
1.过滤版本(已实现)
2.过滤CompanyName(过滤/删除重复)
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 的最新时间戳,然后将其添加到列表中。
【问题讨论】:
-
所以
QueryResult2被复制了?您可以使用 MoreLinq 中的 DistinctBy 来删除这些重复项。 -
但问题是重复的公司名称有自己独特的时间戳。所以我只需要为每个公司提供 1 个 Duplicate,它来自所有 Duplicate the latest Timestamp。也可能有多个公司:例如 Comanyname = C1 重复计数为 5,但每个重复都有一个唯一的时间戳
-
@johnny 您可能会提供更多详细信息您的输入/所需输出/不需要的输出,以确保我们的想法正确。