【问题标题】:Linq to XML query to SQLLinq to XML 查询到 SQL
【发布时间】:2013-07-04 07:03:56
【问题描述】:

更新:

我已将我的 xml 转换为 Coldfusion 中的查询表,因此这可能有助于解决此问题。

所以我的数据是:

[id] | [code] | [desc] | [supplier] | [name] | [price]
------------------------------------------------------
1    | ABCDEF | "Tst0" |   "XYZ"    | "Test" | 123.00
2    | ABCDXY | "Tst1" |   "XYZ"    | "Test" | 130.00
3    | DCBAZY | "Tst2" |   "XYZ"    | "Tst2" | 150.00

现在我需要的是下面的 linq to xml 查询输出。输出应该是这样的(我会用 JSON 编写,这样我更容易输入):

[{
    "code": "ABCD", 
    "name": "Test", 
    "products": 
        {
            "id": 1,
            "code": "ABCDEF",
            "desc": "Tst0",
            "price": 123.00
        },
        {
            "id": 2,
            "code": "ABCDXY",
            "desc": "Tst1",
            "price": 130.00
        }
},
{
    "code": "DCBA", 
    "name": "Tst2", 
    "products": 
        {
            "id": 3,
            "code": "DCBAZY",
            "desc": "Tst2",
            "price": 150.00
        }
}]

如您所见,按“CODE”和“Supplier”代码的前 4 个字符分组。

谢谢


如何将以下 LINQ to XML 查询转换为 SQL?
from q in query
group q by new { Code = q.code.Substring(0, 4), Supplier = q.supplier } into g
select new
{
  code = g.Key.Code,
  fullcode = g.FirstOrDefault().code,
  supplier = g.Key.Supplier,
  name = g.FirstOrDefault().name,
  products = g.Select(x => new Product { id = x.id, c = x.code, desc = string.IsNullOrEmpty(x.desc) ? "Description" : x.desc, price = x.price })
}

我能想到的最好的:

SELECT c, supplier, n
FROM products
GROUP BY C, supplier, n 

不确定如何在其中获取子查询或获取代码的子字符串。

ps:这是为了coldfusion,所以我猜他们的sql版本可能与ms sql不同..

【问题讨论】:

  • LINQ 的优点是,它具有更高的抽象级别,可以更轻松地完成 SQL 中更难完成的事情。
  • 只需附加一个 SQL 分析器,然后查看执行了哪些 SQL 查询。
  • 查询实际上是 LINQ to XML,而不是来自数据库..
  • 看来您误解了 LINQ 是什么。 LINQ 是对某些提供程序的通用查询语言。 LINQ to XML 将生成 XPath 查询。 Linq to NHibernate 或 EF 将生成 SQL。由提供者来生成适当的查询。 XPath 与 SQL 的不同,就像 XML 与整个 RDBMS 系统的不同一样。几乎可以肯定,一个好的 XPath 查询是一个糟糕的 SQL 查询。
  • @rudeovskiz​​ebear 我想你不能以这种方式退货。在 Linq 中它是一个集合,在 sql 中它是一个表。但是在 SQL 中,您不能在子查询中选择表,只能选择单个值。所以,我想你应该尝试做两个选择查询——一个是针对产品的,第二个是针对第一个查询的结果。

标签: sql linq coldfusion


【解决方案1】:

最简单的方法是将分析器附加到您的数据库,然后查看 linq-to-SQL 引擎生成的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多