【问题标题】:Linq 2 SQL Syntax HelpLinq 2 SQL 语法帮助
【发布时间】:2010-07-22 12:34:37
【问题描述】:

我几乎完成了将 MySQL 应用程序转换为 Linq2SQL 的工作,但我很难理解最后一个 SQL 查询

SELECT a.URL, b.URL AS DuplicateURL
FROM Pages a
INNER JOIN Pages b ON a.MetaDescription = b.MetaDescription
                   AND a.PageID <> b.PageID
WHERE a.DomainID = @reportid
  AND b.DomainID = @reportid
  AND LENGTH(TRIM(a.MetaDescription)) > 0
  AND a.URL < b.URL
ORDER BY a.URL ASC

能否再给我一些关于如何在 Linq2SQL 中创建此查询的语法帮助?

非常感谢任何帮助

【问题讨论】:

  • LINQ to SQL 不支持 MySQL 数据库。您还必须迁移到 MS SQL 或开始使用实体框架。
  • 我没有使用 MySQL 我正在尝试使用 Linq2SQL?就像将此查询移到 Linq 中一样,这就是我要求语法帮助的原因:S
  • 是的,但是 LINQ to SQL 不能与 MySQL 数据库通信。所以您也将数据移动到 Microsoft SQL 数据库?
  • 如果您仍然感到困惑,也许您应该在这里问一下。

标签: sql sql-server linq linq-to-sql


【解决方案1】:

是这样的:

var DuplicatePages = 
    from a in DBContext.Pages
    join b in DBContext.Pages on a.MetaDescription equals b.MetaDescription
    where (a.PageID <> b.PageID) && (a.DomainID == ReportID) && 
    (b.DomainID == ReportID) && (a.MetaDescription.Trim().Length > 0) && 
    (a.URL < b.URL)
    orderby a.URL
    select new { Url = a.URL, DuplicateUrl = b.URL };

【讨论】:

    【解决方案2】:

    这很简单:

    var reportId = ...;
    
    var duplicates =
        from a in db.Pages
        from b in db.Pages
        where a.MetaDescription == b.MetaDescription
        where a.PageID != b.PageID
        where a.DomainID == reportId
        where b.DomainID == reportId
        where a.MetaDescription.Trim().Length > 0
        where a.URL < b.URL
        orderby a.URL
        select new { Url = a.URL, DuplicateUrl = b.Url }
    

    【讨论】:

    • 只是一个问题,a.MetaDescription.Trim().Length 会被翻译成 SQL 好吗?我问是因为我还没有检查我的答案。
    • 我也没有检查过,但是 LINQ to SQL 提供程序有一个非常可靠的查询翻译器,所以我猜这是可行的。但请检查。
    • 根据 LINQPAD .Trim().Length &gt; 被翻译成 LEN(LTRIM(RTRIM(.))) &gt; ,但那是针对我手头的数据库,而不是这个。
    • @Mark_Hurd 翻译它是最重要的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2013-08-21
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多