Linq to sql LInq到sql查询

Linq to sql LInq到sql查询,linq-to-sql,Linq To Sql,我有一个sql查询,如下所示: Declare @DivisionNo INT SET @DivisionNo = 5117 SELECT distinct CASE WHEN ISNULL([DivisionNo],'') <> @DivisionNo THEN @DivisionNo ELSE [DivisionNo] END as DivisionNo --,[RecordID]

我有一个sql查询,如下所示:

  Declare @DivisionNo INT

  SET @DivisionNo = 5117



  SELECT distinct CASE WHEN ISNULL([DivisionNo],'') <> @DivisionNo 
                       THEN @DivisionNo ELSE [DivisionNo] END as DivisionNo

      --,[RecordID]    
      ,[AcctCat]    
      ,[AcctCatDesc]    
      ,[CostCode]    
      ,[CostCodeDesc]

  FROM [dbo].[vw_eSchdl_AcctCat_CostCode]    
  WHERE DivisionNo = @DivisionNo

  UNION

  SELECT distinct CASE WHEN ISNULL([DivisionNo],'') <> @DivisionNo 
                       THEN @DivisionNo ELSE [DivisionNo] END as DivisionNo

      --,[RecordID]    
      ,[AcctCat]    
      ,[AcctCatDesc]    
      ,[CostCode]    
      ,[CostCodeDesc]

  FROM [dbo].[vw_eSchdl_AcctCat_CostCode]    
  WHERE AcctCat not in (
      SELECT [AcctCat]     
      FROM [dbo].[vw_eSchdl_AcctCat_CostCode]
      WHERE DivisionNo = @DivisionNo
  )
如何使用linq到sql复制它


谢谢

您可以使用将SQL转换为Linq。你可以从下载。

如果你有一点时间,最好的学习方法就是自己动手。您可以使用SQL打开的选项卡和LINQ打开的选项卡,并尝试复制您的查询结果。

功能等效的选项卡如何

int divisionNo = 5117;

var matches = from ac in context.AcctCatCostCodes 
              where ac.DivisionNo == divisionNo
              select ac;

var missingAcctCat = from ac in matches
                     select ac.AcctCat;

var others = from ac in context.AcctCatCostCodes
             where !missingAcctCat.Contains(ac.AcctCat)
             select ac;

var union = from ac in matches.Union(others)
            select new
            {
                DivisionNo = ac.DivisionNo ?? divisionNo,
                ac.AcctCat,
                ac.AcctCatDesc,
                ac.CostCode,
                ac.CostCodeDesc
            };
。。。与方法相同,而不是查询语法

var matches = context.AcctCatCostCodes
                     .Where(ac => ac.DivisionNo == divisionNo);

var missingAcctCat = matches.Select(ac => ac.AcctCat);

var others = context.AcctCatCostCodes
                    .Where(ac => !missingAcctCat.Contains(ac.AcctCat));

var union = matches.Union(others).Select(ac =>
             new
            {
                DivisionNo = ac.DivisionNo ?? divisionNo,
                ac.AcctCat,
                ac.AcctCatDesc,
                ac.CostCode,
                ac.CostCodeDesc
            });
。。。由LINQ2SQL生成的SQL

SELECT COALESCE([t4].[DivisionNo],@p2) AS [DivisionNo], 
       [t4].[AcctCat], 
       [t4].[AcctCatDesc], 
       [t4].[CostCode], 
       [t4].[CostCodeDesc]
FROM (
    SELECT [t3].[AcctCat], [t3].[AcctCatDesc], [t3].[CostCode], 
           [t3].[CostCodeDesc], [t3].[DivisionNo]
    FROM (
        SELECT [t0].[RecordID], [t0].[AcctCat], [t0].[AcctCatDesc], 
               [t0].[CostCode], [t0].[CostCodeDesc], [t0].[DivisionNo]
        FROM [AcctCatCostCode] AS [t0]
        WHERE [t0].[DivisionNo] = @p0
        UNION
        SELECT [t1].[RecordID], [t1].[AcctCat], [t1].[AcctCatDesc], 
               [t1].[CostCode], [t1].[CostCodeDesc], [t1].[DivisionNo]
        FROM [AcctCatCostCode] AS [t1]
        WHERE NOT (EXISTS(
            SELECT NULL AS [EMPTY]
            FROM [AcctCatCostCode] AS [t2]
            WHERE ([t2].[AcctCat] = [t1].[AcctCat]) 
                  AND ([t2].[DivisionNo] = (@p1))
            ))
        ) AS [t3]
    ) AS [t4]

你试过什么?你能走到半路,却被困在某个地方吗?你能把你的东西贴出来吗?哪一位会给你带来麻烦?或者您不知道从哪里开始?@Mark-LinqPad不会将SQL转换为Linq。然而,一款名为Linqer的产品将继续使用。