2016-04-02 27 views
0

T-SQL/SQL Serverを使用するのは新しいですが、Linqで希望の結果を得る方法がわかりません。結果をグループ化して重複を削除するには

from com in Complaints 
    join pro in Projects on com.ProjectId equals pro.ProjectId 
    join cont in Contacts on com.SubContractorContactId equals cont.ContactId 
    join cont2 in Contacts on com.OccupantContactId equals cont2.ContactId 
    where com.EmailStatusId == null 
    select new 
       { 
        pro.ProjectName, 
        com.ComplaintId, 
        com.ComplaintName, 
        SubContractorName = cont.FirstName, 
        SubContractorEmail = cont.Email, 
        com.DueDate, 
        OccupantName = cont2.FirstName, 
        OccupantPhone = cont2.Phone, 
        OccupantEmail = cont2.Email 
       } 

Linq results

が、私は結果が、その中にリストされた各苦情に明確なプロジェクトを返すしたい:私は次のような結果を得るの下のコードから

。さらに、重複を削除しながら、各連絡先を苦情の中でグループ化したいと思います。だから、私の望む結果は、各プロジェクトごとに1つの行になり、プロジェクト内ではそれぞれの苦情があり、各苦情の連絡先に連絡があります。

私はこの概要を作成しました。

Projects 
- Lake Road Construction 
    - Complaints 
     - Foundation Cracks: ComplaintId 1, DueDate 
      - Contacts 
       - SubContractor 
        - Carlo 
        - [email protected] 
       - Occupant 
        - William 
        - [email protected] 
        - 616-846-0467 
     - Drywall: ComplaintId 2, DueDate 
      - Contacts 
       - SubContractor 
        * No SubContractor needed since the previous complaint has the same SubContractor. 
       - Occupant 
        - Keesha 
        - [email protected] 
        - 661-205-2018 

- Jennifer Lane Renovation 
    - Complaints 
     - Light Fixture: ComplaintId 3, DueDate 
      - Contacts 
       - SubContractor 
        - Ardith 
        - [email protected] 
       - Occupant 
        - Olivia 
        - [email protected] 
        - 210-530-5281 
     - Plumbing: ComplaintId 4, DueDate 
      - Contacts 
       * Contacts have already been collected from the other complaint. 

私が読んだところでは、「new by group」を使用するか、UNIONを使用する必要があると思います。しかし、私が行くべき方向ではわかりません。どんな助けも大歓迎です。

答えて

2

これは、ProjectNameに基づいてデータをグループ化する必要があります。結果は、ProjectプロパティとComplaintsプロパティを持つ匿名オブジェクトのリストです。 Complaintsプロパティの各項目には、あなたは命の恩人だCompIdContact財産

var groupedResults = (from co in Complaints 
    join p in Projects on co.ProjectId equals p.ProjectId 
    join cont in Contacts on co.SubContractorContactId equals cont.ContactId 
    join cont2 in Contacts on co.OccupanttContactId equals cont2.ContactId 
      select new 
      { 
       ProjecttName = p.Name, 
       ComplaintId = co.Id,         
       SubContractorName = cont.FirstName, 
       OccupantName = cont2.FirstName 
       // Fill the other properties here please         
      } 
).GroupBy(k => k.ProjecttName, i => i, (x, b) => new 
{ 
    Project=x, 
    Complaints =b.Select(d=> new 
    { 
     CompId=d.ComplaintId, 
     Contacts=new { SubContr=d.SubContractorName, Occupant = d.OccupantName} 
    }) 
}).ToList(); 
+0

を持っています!私はこのようにすることは決して考えなかったでしょう。私は私のLinq /ラムダをブラッシュアップする必要があるように見えます。 –

関連する問題