2016-05-11 34 views
0

試圖做什麼SQL查詢(SELECT DISTINCT (first,second),third FROM table)會做,但我用LINQ和數據表做。不同的數據表中的多列


編輯

SQL應該像一個MySQL

select first, second, third FROM table group by first, second


DataTable secondTable = new DataTable(); 
secondTable.Columns.Add("name", typeof(string)); 
secondTable.Columns.Add("date", typeof(string)); 
secondTable.Columns.Add("clockIn", typeof(string)); 
secondTable.Columns.Add("clockOut", typeof(string)); 

var t4 = (from a in firstTable.AsEnumerable() 
select new 
{ 
    name = a.Field<string>("name"), 
    date = a.Field<string>("date"), 
    clockIn = a.Field<string>("clockIn"), 
    clockOut = a.Field<string>("clockOut") 
}).Distinct(); 

var t5 = (from a in firstTable.AsEnumerable() 
select new 
{ 
    name = a.Field<string>("name"), 
    date = a.Field<string>("date") 
}).Distinct(); 

var t6 = (from d in t5 
      join a in t4 
      on new 
      { 
       d.name, 
       d.date 
      } 
      equals new 
      { 
       a.name, 
       a.date 
      } 
      select secondTable.LoadDataRow(
      new object[] 
      { 
       d.name,d.date,a.clockIn,a.clockOut 
      }, false)).ToList(); 

ViewBag.Data = secondTable; 

這段代碼做的是,它是在加入t4和,沒有排除。雖然我想要的是從t4出現在t5中的所有行應該基於(名稱,日期)與t6聯合,並且t5中不存在於t4中的所有行應排除在外。任何人都可以幫忙嗎?

+0

'firstTable'從哪裏來的? – KaeL

+0

@KaeL想象一下'firstTable'是原始表格。 – Jogi

+0

@KaeL在調試的時候,我有雙重檢查,'t4'和't5'有他們想要的記錄。我只用't6'做錯了事。 – Jogi

回答

1

根據您的意見,您可以按照所需的字段進行分組,並採用任何分組結果。

您可以通過clockin或clockout命令來獲得較少的「隨機」結果。

var t6 = firstTable.AsEnumerable() 
        .GroupBy(a => new { 
            name = a.Field<string>("name"), 
            date = a.Field<string>("date") 
            } 
          ) 
        .Select(g => g.First()) 
        //or Select(g => g.OrderBy(a => a.Field<string>("clockIn")).First() 
        .ToList(); 
+0

感謝您的回答。 'a.Field (「name」)''和'a.Field (「name」)'有一條紅色錯誤行:說明: 無效的匿名類型成員聲明符。匿名類型成員必須用成員分配,簡單名稱或成員訪問來聲明。 – Jogi

+0

@RehanKhan編輯,我用數據表不夠用; –

+0

Althaus。得到它了。請修改您的答案後刪除您的評論。謝謝 – Jogi

相關問題