2011-04-01 112 views
3

我有以下SQL查询,我想将它转换为LINQ。我想用一个子查询或LINQ include语法和不想使用join如何将此SQL查询转换为LINQ到SQL

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%')) 
+1

你为什么不把你的项目的其余部分,而我们也可以做到这一点!如何你的一些努力 - 你想达到什么?你的桌子是什么样的?你有什么尝试和什么不工作?如何格式化你的SQL更好一点... – 2011-04-01 13:09:09

+0

嗨杰夫:我是Linq新手。我想通过我在两张桌子上加入来计数。我是SQL方面的专家,并且很少使用LINQ,所以我来参加这个论坛。我不打算在这里发布我的所有项目。 – DotnetSparrow 2011-04-01 13:14:55

+0

够公平的,但Geoff的一些观点仍然存在,您尝试了什么,那么它不会产生您预期的结果?你可以发布你的一些代码吗? – Bazzz 2011-04-01 13:23:42

回答

3

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

+0

@dample:我有LinqPad,但我没有看到将SQL转换为Linq的选项 – DotnetSparrow 2011-04-01 13:10:34

+0

@DotnetSparrow检查此[链接](http://i51.tinypic.com/2heajup.png) – Damb 2011-04-01 13:15:02

+0

您应该得到您的查询的'翻译' (它适用于linq查询)在sql和lambda中。相同的行为应该在其他方向工作(sql> linq)。即使它不能按需要工作,仍然可以使用Linqer,它实际上是LINQ工具的SQL。所以我不明白为什么我会在这方面得到低估。 – Damb 2011-04-01 13:18:33

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,然后测试它 - 逐行翻译你会很好 - 你也会发现Intellisense非常棒!


请也意识到,如果你使用.Include()那么你可能使用生成的SQL内join反正。

+0

谢谢,但我需要使用子查询或包括和没有连接 – DotnetSparrow 2011-04-01 13:26:50

+0

在这种情况下,我已经更新了我的建议 - 首先使用事实,你是SQL的专家,首先在SQL中将查询转换为非连接格式。 – Stuart 2011-04-01 13:33:06