[英]Linq & C# - Inserting distinct data from one class into another
下午全部
我有一个可爱的webservice调用带回一个列表,我们称之为List<Everything>
这将返回以下内容:
Product ProductName SomethingElse
1 Dave abc
1 Dave def
1 Dave ghi
2 Jason abc
2 Jason def
3 Terry abc
3 Terry def
3 Terry ghi
3 Terry jkl
然后我有另一个List<Products>
(int Product,string ProductName),我想使用List<Everything>
的不同产品信息填充。
所以我试图得到以下结果:
Product Productname
1 Dave
2 Jason
3 Terry
我如何使用Linq实现这一目标?
为可能是血腥明显的事情道歉。
List<Products> products = (from x in everythingList
group x by new { x.Product, x.ProductName } into xg
select new Products
{
Product = xg.Key.Product,
ProductName = xg.Key.ProductName
}).ToList();
var distinctProducts = everything.Select(e=>new { Product, Productname = e.ProductName }).Distinct();
List<Products> products = GetEverythingService()
.Select(p => new Products { Product = p.Product, Productname = p.ProductName})
.Distinct();
正如dlev在注释中正确指出的,如果Products类实现IEqualityComparer <T>接口并覆盖Equals和GetHashCode方法,则Distinct仅适用于此情况。
如果仅在这种情况下需要进行比较,这可能是过度的,尽管如果要使用id和产品名称在其他地方进行产品对象比较,那么这是一个可行的选择。 我个人觉得它比GroupBy Linq扩展程序更具可读性,但显然意见会有所不同。
这个怎么样:
List<Everything> items = ...
var results = items.GroupBy(x => new { x.Product, x.ProductName })
.Select(g => new Products()
{
Product = g.Key.Product,
ProductName = g.Key.ProductName
})
.ToList();
你可以尝试这样做。
List<Products> products = new List<Products>();
var listEverything = select d in "data from your ws"
select d.Product, d.ProductName).Distinct(x=>x.ProductName);
foreach(var item in listEverything)
{
products.Add(new Products { Product=item.Product, ProductName=item.ProductName});
}
你可以试试这个。
var unique = list.GroupBy(item => item.Product)
.Select(group => new
{
Product = group.Key,
group.First().ProductName
})
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.