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

3

我有以下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%'))

1
为什么不把你的项目剩余部分发送过来,我们也可以处理!你能不能付出一些努力——你想要实现什么?你的表是什么样子的?你尝试了什么,有哪些问题?SQL格式化一下怎么样…… - Geoff Appleford
嗨,Geoff:我是LINQ的新手。我正在尝试在两个表上进行联接并获取计数。我是SQL方面的专家,很少使用LINQ,这就是为什么我来到这个论坛的原因。我并不打算在这里发布我的整个项目。 - DotnetSparrow
还不错,但是Geoff的一些观点仍然站得住脚。你尝试了什么?它没有产生你期望的结果吗?你能发布一些你的代码吗? - Bazzz
希望你不介意,我重新调整了查询语句,使其更加易读,并使用表别名代替表名以减少视觉混乱。我还建议尝试将问题简化到最简形式,而不是粘贴一堵那样的代码墙。这样你更有可能得到帮助。 - Kev
2个回答

3
将这段代码转换为Linq应该很容易 - 但是我认为如果您想要相同的查询结果,应该使用一个join操作符!首先创建Linq2Sql模型并导入两个表,然后您的查询将具有以下一般结构。
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操作。


在这种情况下,我更新了我的建议 - 首先利用您在SQL方面的专业知识,将查询转换为非Join格式的SQL。 - Stuart

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

@dample:我有LinqPad,但是我没有看到将SQL转换为Linq的选项。 - DotnetSparrow
你应该能够在 SQL 和 Lambda 中获取查询的“翻译”(对于 Linq 查询,它是这样工作的)。同样的行为也应该适用于另一个方向(SQL > Linq)。即使它不能按照你的需求工作,你仍然可以使用 Linqer,它实际上是一个 SQL 到 LINQ 的工具。所以我不明白为什么会有人对此投反对票。 - Damb
@dample:我使用了这个,但是当我点击 Lambda 时,没有看到 LINQ,尽管结果选项卡显示了 1700 条记录。 - DotnetSparrow
@DotnetSparrow:那就试试 Linqer。 - Damb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接