【问题标题】:How to get distinct records from a list如何从列表中获取不同的记录
【发布时间】:2013-09-24 07:28:51
【问题描述】:

我有一个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 的列表。

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

我已经尝试用 hashtable 代替 List
我也试过了

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

但这也不起作用。请给我一个更好的解决方案。
提前致谢

【问题讨论】:

    标签: list hashset


    【解决方案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();
    

    【讨论】:

    • 我是编程新手,你能告诉我我必须在哪里使用上述扩展
    • 如上创建类文件(我添加了类def)并尝试使用。
    猜你喜欢
    • 2011-08-31
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多