2017-05-01 15 views
5

đối tượng của tôi như thế nàyGet mục riêng biệt bởi sự kết hợp từ danh sách C#

public class Region 
{ 
    public Region(); 

    public string City { get; set; } 
    public int PostCode { get; set; } 
    public string WfRegion { get; set; } 
} 

tôi có một danh sách này các đối tượng trong lớp này đâu dữ liệu là như thế này

Rodney , 7845 , Auckland 
Rodney , 3435 , Auckland 
Rodney , 4566 , Auckland 
Rodney , 3445 , North Island 

Tôi muốn lọc này để tôi có thể nhận được kết quả như thế này

Rodney , 7845 , Auckland 
    Rodney , 3445 , North Island 

(tất cả sự kết hợp của thành phố và khu vực bất kể mã bưu chính). Tôi đã viết một số truy vấn như thế này

 var cities = regionsData.DistinctBy(p => 
p.WfRegion).DistinctBy(p=>p.PostCode).DistinctBy(p => p.City).ToList(); 

Nhưng điều này đem lại cho tôi một kết quả của mục đầu tiên chỉ như thế này

 Rodney , 7845 , Auckland 

Làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

7

Bạn cần phải sử dụng GroupBy

var result = regionsData.GroupBy(p => new {p.WfRegion, p.City}) 
    .Select(g => g.First()) 
    .ToList(); 

Điều đó sẽ cung cấp cho bạn nhóm do khu vực và thành phố và sau đó bạn chỉ có thể chọn mục đầu tiên trong mỗi nhóm.

0

Bạn có thể sử dụng để giải quyết DistinctBy này như sau:

var cities = regionsData.DistinctBy(x => (x.City, x.WfRegion)); 

Lưu ý rằng điều này đang sử dụng C# 7 cú pháp tuple. Đối với các phiên bản cũ hơn, bạn phải sử dụng một loại vô danh như sau:

var cities = regionsData.DistinctBy(x => new {x.City, x.WfRegion}); 

Full console dụ:

using System; 
using System.Collections.Generic; 
using MoreLinq; 

namespace ConsoleApp1 
{ 
    public class Region 
    { 
     public string City  { get; set; } 
     public int PostCode { get; set; } 
     public string WfRegion { get; set; } 

     public override string ToString() 
     { 
      return $"City:{City}, PostCode:{PostCode}, WfRegion:{WfRegion}"; 
     } 
    } 

    class Program 
    { 
     static void Main() 
     { 
      IEnumerable<Region> regions = new [] 
      { 
       new Region { City = "CityOne", PostCode = 1, WfRegion = "WfRegionOne"}, 
       new Region { City = "CityOne", PostCode = 2, WfRegion = "WfRegionTwo"}, 
       new Region { City = "CityTwo", PostCode = 3, WfRegion = "WfRegionOne"}, 
       new Region { City = "CityOne", PostCode = 4, WfRegion = "WfRegionOne"}, 
       new Region { City = "CityOne", PostCode = 5, WfRegion = "WfRegionThree"}, 
       new Region { City = "CityTwo", PostCode = 6, WfRegion = "WfRegionOne"}, 
       new Region { City = "CityTwo", PostCode = 7, WfRegion = "WfRegionThree"} 
      }; 

      var result = regions.DistinctBy(x => (x.City, x.WfRegion)); 

      Console.WriteLine(string.Join("\n", result)); 
     } 
    } 
} 
Các vấn đề liên quan