首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将嵌入式SQL迁移到LinqToSql vs存储过程

问将嵌入式SQL迁移到LinqToSql vs存储过程
EN

Stack Overflow用户
提问于 2013-01-05 23:06:07
回答 1查看 104关注 0票数 0

我正在将一些代码从ColdFusion迁移到.NET LinqToSQL。下面的查询当前嵌入到ColdFusion中。与其尝试让LinqToSQL这样做,我还在考虑编写一个存储过程。注意:在这个上下文中,CF中的##实际上是SQL中的#。我不是在创建全局临时表。

代码语言:javascript
复制
<cfquery name="qryTrafficDetails">
    DECLARE @startDate date
    DECLARE @endDate date
    SET     @startDate = <cfqueryparam cfsqltype="CF_SQL_date" value="#filter.StartDate#">
    SET     @endDate = <cfqueryparam cfsqltype="CF_SQL_date" value="#filter.endDate#">


    SELECT  CONVERT(date, CreateDate) AS CreateDate, url_vars.value('(search)[1]', 'nvarchar(max)') AS Item, remote_addr
    INTO    ##tempTraffic
    FROM    dbo.Traffic WITH (NOLOCK)

    WHERE   Createdate BETWEEN @startDate AND @endDate
    AND     url_vars.exist('.[search]') = 1     


    SELECT Area, AreaSort, Item, CalendarDate, isNull(Visitor, 0) AS Visitor, ISNULL(Hit,0) AS Hit
    FROM    dbo.Calendar LEFT JOIN 
        (



        SELECT AreaSort = 10, 'Search' AS Area, FullGrid.Item AS Item, FullGrid.CalendarDate AS CreateDate,

                COUNT(DISTINCT remote_addr) AS visitor, 
                COUNT(remote_addr) as hit

        FROM  (
            SELECT DISTINCT CalendarDate, Item
            FROM dbo.Calendar, ##TempTraffic
            WHERE   CalendarDate  BETWEEN @startDate AND @endDate
            ) FullGrid 

        LEFT JOIN ##TempTraffic AS DataItem
            ON FullGrid.CalendarDate = CreateDate
            AND FullGrid.Item = DataItem.Item       

        GROUP BY FullGrid.Item, FullGrid.CalendarDate



        ) AS SummaryDetail

    ON  CalendarDate = SummaryDetail.CreateDate

    WHERE   CalendarDate  BETWEEN @startDate AND @endDate
    AND AreaSort IS NOT NULL    

    ORDER BY AreaSort, Item, CalendarDate
    </cfquery>

    <cfreturn qryTrafficDetails>

我所关注的一些问题是:

  • 如何处理临时表
  • LinqToSql涵盖了所有内容吗?
  • 这是LinqToSql不合适的一个例子吗?
  • 性能
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-05 23:26:48

我不完全确定sql代码的意图和动机,但似乎是一个总结报告。在这种情况下,linq to sql可能不是理想的解决方案。

我认为您无法从Linq2SQL创建临时表。您可以创建子查询,也可以使用linq 2对象连接以前执行的查询的结果。

但是我的建议是检查是否没有更好的方法来使用更简洁的查询来查询数据,这个查询也可以在linq 2 sql上执行。

如果您确实需要这类查询,最好将其放入存储过程中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14177392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档