2013-02-25 146 views
0

我有一个SQL查询:LINQ查询与子where子句

SELECT [Paypoint] 
     ,[Department] 
     ,[EmployeeCode] 
     ,[Gender] 
     ,[EmployeeTitle] 
     ,[Initials] 
     ,[Surname] 
     ,[ItemsIssuedDate] 
     ,[ItemsIssuedStockNumber] 
    FROM [MyTable] AS a 
    WHERE 
(
     [ItemsIssuedDate] = ( SELECT  max([ItemsIssuedDate]) 
           FROM  [MyTable] AS b 
           WHERE  a.[Paypoint] = b.[Paypoint] 
              AND a.[Department] = b.[Department] 
              AND a.[EmployeeCode] = b.[EmployeeCode] 
              AND a.[Gender] = b.[Gender] 
              AND a.[Surname] = b.[Surname] 
          ) 

一个人怎么会得到比较性LINQ查询?我不能使用SQL查询的数据已经是一个DataSet,现在需要进一步修改...

我已经尝试,但是这并不工作:

 var query = from a in excelTable 
        where 
        (
         from c in excelTable 
         group c by new 
         { 
          c.Paypoint, 
          c.EmployeeCode 
         } into g 
         where string.Compare(a.Paypoint, g.Key.Paypoint) == 0 && string.Compare(a.EmployeeCode, g.Key.Paypoint) == 0 
         select g.Key.Paypoint 
        ) 
        select a; 

回答

0

你最直接用SQL查询将是:

var query = 
    from a in excelTable 
    let maxIssueDate = 
     (from b in excelTable 
     where a.Paypoint == b.Paypoint && 
      a.Department == b.Department && 
      a.EmployeeCode == b.EmployeeCode && 
      a.Gender == b.Gender && 
      a.Surname == b.Surname 
     select b.ItemsIssueDate).Max() 
    where a.ItemsIssueDate == maxIssueDate 
    select a; 
+0

谢谢,这个作品 - 使其更快的任何方式....查询在后台工作中运行约需6分钟... – JayT 2013-02-25 18:35:17

2
var query = from a in MyTable 
      group a by new { 
       a.Paypoint, 
       a.Department, 
       a.EmployeeCode, 
       a.Gender, 
       a.Surname 
      } into g 
      select g.OrderByDescending(x => x.ItemsIssuedDate) 
        //.Select(x => new { required properties }) 
        .First();  

你也可以选择仅包含必填字段的匿名对象。由你决定。

+0

不幸的是,这只是每个日期返回一个项目,如果有很多项目有相同的日期,它不工作... – JayT 2013-02-25 18:31:54