如何将此SQL查询转换为LINQ to SQL

时间:2011-04-01 13:02:42

标签: linq linq-to-sql

我有以下SQL查询,我想将其转换为LINQ。我想使用子查询或LINQ include语法,不想使用join

SELECT Count(*) AS CountOfRecs 
FROM tblAcc a
INNER JOIN tblAccOwner o ON
  a.[Creditor Registry ID] = o.[Registry ID] AND
  a.[Account No] = a.[Account No] 
WHERE 
  (a.[Account Owner ID] = 731752693037116688) AND 
   a.[Account Type] NOT IN ('CA00', 'CA01', 'CA03', 'CA04', 'CA02',
                            'PA00', 'PA01', 'PA02', 'PA03', 'PA04')) AND
  (DATEDIFF(mm, a.[State Change Date], GETDATE()) <= 4 OR
    a.[State Change Date] IS NULL AND 
   (a.[Account Type] IN ('OD','CL00','PL00') OR a.[Account Type] LIKE '%hala%'))

2 个答案:

答案 0 :(得分:3)

您可以使用LinqPadLinqer。我会尝试在LinqPad中转换它,但我必须拥有数据库。

答案 1 :(得分:3)

将此转换为Linq应该非常简单 - 尽管如果您想要相同的查询,我认为您应该使用join

首先创建你的Linq2Sql模型并导入你的2个表,然后你的查询将具有一般结构

var query = from acc in db.Accs
    join accOwner in db.AccOwners on {acc.regId, acc.AccountNo} equals {accOwner.regId, accOwner.AccountNo}
    where // your where conditions
          // - these should all convert quite easily
          // - just translate them one by one
    select acc;

var count = query.Count();

如果你确实需要使用子查询,那么既然你是SQL的专家,那么首先在SQL中编写查询,然后测试它,然后将查询翻译成Linq,然后测试它 - 逐行进行翻译你会没事的 - 你也会觉得智能感觉很棒!


请注意,如果您使用.Include(),那么您可能正在生成的SQL中使用join