通过Linq ASP.net Core Razor Pages选择Distinct values



我有一个IEnumerable,它从SQL存储过程中返回进程和详细信息的列表。

我正在尝试从ProcessList中获取ProcessQuestions的Distinct值的列表。

我尝试过以下代码,但它总是列出ProcessList中的所有内容,包括重复的ProcessQuestions。

ProcessListDistinct = ProcessList.Select(p => new ProcessListSummary
{
ProcessQuestions = p.ProcessQuestions,
ProcessQuestionsID = pProcessQuestionsID
}).Distinct().ToList();

我如何只显示ProcessQuestions的不同值。

非常感谢

请参阅此线程。

特定属性上的LINQ的Distinct((

您需要的是一个"区别在于";有效地

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}

因此,您可以将代码更改为使用DistinctBy

var s = ProcessList.Select(b => new ProcessList
{
//...
ProcessListSummary= b.ProcessListSummary.Select(p => new ProcessListSummary
{
ProcessQuestions = p.ProcessQuestions,
ProcessQuestionsID = p.ProcessQuestionsID
}).DistinctBy(x => x.ProcessQuestions).ToList()
}).ToList();

最新更新