2010-08-10 16 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 }; 

समूहबद्ध और कर्मचारी को रिटर्न देता है। और परिणाम

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

मुझे उन पंक्तियों को हटाने की आवश्यकता है जिनके लिए कर्मचारी कार्य दोहरा रहा है उदा। EmployeeID साथ पंक्ति में से किसी एक = 20
धन्यवाद

+0

क्या यह GrpId = 6 के साथ किसी की बजाय अंतिम पंक्ति को हटा देगा? –

+0

ठीक है, मुझे अलग-अलग कर्मचारी के साथ परिणाम की आवश्यकता है किसी को भी जिज्ञासा के लिए – Tassadaque

उत्तर

26

ठीक है, अगर आप परवाह नहीं है जो कर्मचारी निकाल दिया जाता है, आप की तरह कुछ की कोशिश कर सकते:

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

आप निर्दिष्ट नहीं किया है यह है कि क्या LINQ से SQL में, LINQ से ऑब्जेक्ट्स या कुछ और ... मुझे नहीं पता कि इसका SQL अनुवाद क्या होगा। आप डेटा की एक अपेक्षाकृत छोटी राशि के साथ काम कर रहे हैं तो आप हमेशा के लिए इस अंतिम बिट के लिए मजबूर कर सकता है प्रक्रिया:

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

उस बिंदु आप वास्तव में MoreLINQ जो एक आसान DistinctBy विधि है इस्तेमाल कर सकते हैं पर:

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

हटाया जा सकता है! अगर मैं समूहबद्ध के आधार पर विशिष्ट पंक्ति को हटाना चाहता हूं तो क्या होगा। – Tassadaque

+1

@ टासाडाक: आपको जो चाहिए वो के बारे में अधिक जानकारी देना होगा - लेकिन आप संभावित रूप से 'बहिष्करण' या 'कहां' का उपयोग कर सकते हैं। –

+0

यह एक बढ़िया विस्तार है! – d219