繁体   English   中英

Linq&C# - 将不同的数据从一个类插入另一个类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM