2010-08-10 87 views
8

我在員工和組之間有多對多的關係。以下linq聲明刪除基於列值的重複項-linq

int[] GroupIDs = {6,7}; 


var result = from g in umGroups 
    join empGroup in umEmployeeGroups on g.GroupID equals empGroup.GroupID 
    where GroupIDs.Contains(g.GroupID)      
    select new { GrpId = g.GroupID,EmployeeID = empGroup.EmployeeID }; 

返回groupid和employeeid。並且結果是

GrpId | EmployeeID 
6  | 18 
6  | 20 
7  | 19 
7  | 20 

我需要刪除employeeid正在重複的行,例如,與僱員的行中的任何一個= 20
感謝

+0

什麼會使它刪除最後一行而不是GrpId = 6的那一行? – 2010-08-10 06:10:35

+0

好的,我需要獨特的Employeeid結果任何一個可以刪除 – Tassadaque 2010-08-10 06:13:41

回答

26

好吧,如果你不關心哪個員工被刪除,你可以嘗試這樣的:

var result = query.GroupBy(x => x.EmployeeId) 
        .Select(group => group.First()); 

您還沒有指定這是否是在LINQ to SQL,LINQ to Objects或其他東西...我不知道這是什麼SQL翻譯。如果你正在處理的數據量相對少量的你總是可以迫使這最後一位是進程:

var result = query.AsEnumerable() 
        .GroupBy(x => x.EmployeeId) 
        .Select(group => group.First()); 

在這一點上,你實際上可以使用MoreLINQ具有方便DistinctBy方法:

var result = query.AsEnumerable() 
        .DistinctBy(x => x.EmployeeId); 
+0

只是爲了好奇心!如果我想刪除基於groupid的特定行,該怎麼辦? – Tassadaque 2010-08-10 06:54:25

+1

@Tassadaque:你必須提供更多關於你想要的細節 - 但你可能會使用Except或Where。 – 2010-08-10 07:27:42

+0

這是一個很棒的延伸! – d219 2018-02-09 11:44:22