2016-02-05 50 views
0

我正在尋找一個LINQ與我的數據表一起使用,並基於窗體datagrid視圖中的某些列顯示所有重複的行。Linq基於列中的重複值獲得完整的行

LINQ應該給出類似於普通老的結果給SQL。

SELECT * 
FROM Table1 t 
JOIN ( SELECT Taskid, Studentid, DateChangeid 
     FROM Table1 
     GROUP BY Taskid, studentid, datechangeid 
     HAVING COUNT(*) > 1) temp 
    ON t.taskid = temp.taskid AND t.studentid= temp.studentid AND t.datechangeid= temp.datechangeid 
+0

請不要只是轉儲SQL並要求轉換。至少顯示一個類模型,以便導航屬性和關聯的多樣性是可見的。另外,請告訴你的目標(對實體?)什麼類型的LINQ,*和*顯示你自己的第一個努力。他們向我們澄清的比你想象的更多。 –

+0

注意,謝謝。我對C#非常陌生,LiNQ。我會發布詳細的案例進一步的查詢。剛剛添加我的代碼用於類似的情況。 – user3658516

回答

0

我通過編寫下面給出的兩個linq來管理它。

var RepeatedValues = from d in DataTableitems.AsEnumerable() 
      group d by d.Field<string>("MobileNo") into itemGroup 
      where itemGroup.Count() > 1 
      select new { name = itemGroup.Key }; 

var RepeatedInRows= from d in DataTableitems.AsEnumerable() 
       join c in RepeatedValues.AsEnumerable() on d.Field<string> 
       ("MobileNo") equals c.name 
       select d; 
1

這應該做你想要什麼:

var result = 
t.GroupBy(g => new {TaskId = Taskid, StudentId = studentid, DatechangeId = datechangeid}) 
    .Where(g => g.Count > 1) 
    .ToList(); 

現在你Table1則不需要加入Table1,只是做只Table1過濾。

現在的結果將是List<IGrouping<'a,Table1>>型的,但因爲匿名的KeySelectors的,你也可以在一個類中定義TaskIdStudentIdDateChangeID擺脫這一點。例如:

public class Table1GroupKey 
{ 
    public int TaskId {get; set;} 
    public int StudentId {get; set;} 
    public int DateChangeId {get; set;} 
} 

然後你可以使用:

GroupBy(g => new Table1GroupKey { ... }) 

而你的結果將是List<IGrouping<Table1GroupKey,Table1>>

+0

謝謝,這隻列出了用於分組的3列。在我的情況下,我想獲得來自Table1的所有列的完整行。除了匹配的列以外,我的表中還有更多的列。 – user3658516

+0

@ user3658516因此是「IGrouping」。它們將按照「Table1GroupKey」進行分組,並且對於每個鍵都有一個「Table1」類型的記錄列表,以便您*擁有所有列 –