[英]How to get distinct List from a custom list?
我正在使用c#framework 3.5 ..
我的班级在这里
public class KonumBilgisi
{
public string Enlem { get; set; }
public string Boylam { get; set; }
public string KonumAdi { get; set; }
public DateTime Tarih { get; set; }
public byte SucTuruId { get; set; }
}
我有一份清单
列出konumlar;
好吧,我希望得到的项目相当于他们的enlem和boylam变量。
正如您在下面的照片中看到的那样
我想要enlem和boylam,如果它相等,我想让他们到不同的列表..
我可以用循环但是想要使用LINQ,但我无法做到这一点。 我使用groupby但它没有错...
var distinctList = konumlar.GroupBy(x => x.Enlem)
.Select(g => g.First())
.ToList().GroupBy(s=>s.Boylam).Select(g => g.First())
.ToList();
编辑其实我无法解释我的问题..
也许不同是不正确的单词..我想分开彼此相等的项目..
如:
我将pendik项目放在一个列表中,其他人将在konumlar中,但pendik项目将从konumlar列表中删除
编辑2
好的,我想像这样单独列出
您几乎就在那里 - 而不是使用两个单独的GroupBy
调用,使用单个调用,使用两部分键:
var distinctList = konumlar
.GroupBy(s => new {s.Enlem, s.Boylam})
.Select(g => g.First())
.ToList();
编辑:要获取除重复项之外的所有项目,请按如下所示修改查询:
var noPendiks = konumlar
.GroupBy(s => new {s.Enlem, s.Boylam})
.Where(g => g.Count() == 1)
.Select(g => g.Single()) // You know there's only one
.ToList();
以上将为您提供除“pendik”之外的所有项目。 要仅获取“pendik”,请使用以下查询:
var pendiks = konumlar
.GroupBy(s => new {s.Enlem, s.Boylam})
.Where(g => g.Count() > 1)
.SelectMany(g => g)
.ToList();
但是,您可以使用Distinct()Linq函数,它只能处理相同的项目。 如果您需要DistinctBy(),可以使用DistinctBy()方法创建LinqExtensions类。
这是我常用的一个:
/// <summary>
/// Provides common extension methods on LINQ members.
/// </summary>
public static class LinqExtensions
{
#region Members
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;
}
}
}
#endregion Members
}
用它作为:
var distinctList = konumlar.DistinctBy(x => x.property && x.property2 && ...);
亲切的问候
我认为这是你想要的:
List<KonumBilgisi> distinctList = konumlar
.GroupBy(k => new { k.Enlem, k.Boylam })
.SelectMany(x => x.GroupBy(k => k.Boylam).First())
.ToList();
它根据这两个属性选择独特的项目,然后根据Boylam
选择独特的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.