如何从列表中获取不同的记录

时间:2013-09-24 07:28:51

标签: list hashset

我有一个Myclass

类型的列表
List<Myclass> liSubjectIdDetail = new List<Myclass>();

Myclass看起来像

public class  Myclass 
{
    public Nullable<decimal> SubjectId { get; set; }
    public string SubjectName { get; set; }
}

我正在从表中添加记录到liSubjectIdDetail

foreach (decimal Id in VarCEMSIdDetail)
{
    liSubjectIdDetail.AddRange(db.Stt.MyTable.Where(x => x.Id == Id).Select(x => new Myclass { SubjectId = x.SubjectId, SubjectName = x.SubjectName }).ToList());
}

其中Id包含基于我获取的记录的某些ID的列表。

现在我想在此列表中只获得不同的记录。

我尝试用哈希表代替列表
我也试过

liSubjectIdDetail= liSubjectIdDetail.Distinct().ToList();

但这也是行不通的。请给我一个更好的解决方案 提前致谢

1 个答案:

答案 0 :(得分:1)

尝试此扩展方法

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

用法:

liSubjectIdDetail= liSubjectIdDetail.DistinctBy(s => s.SubjectName).ToList();