我有一个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();