【问题标题】:Complex SQL result to C# in under a second [closed]在一秒钟内将复杂的 SQL 结果转换为 C# [关闭]
【发布时间】:2020-10-15 09:44:22
【问题描述】:

我有一个 SQL 选择语句,它在一秒钟内运行,并返回 50k 条记录,从叶节点表匹配到四个表之外的树的顶部。

我没有返回 1000 个可传输对象,而是希望返回结果 Id,然后选择我想要回调的对象。

如何使用 SQL 将此响应转换为 C#。这是生成的 SQL 响应的示例。

某种可遍历列表中的期望结果

t1id, t2id, t3id, t4id
24683, 40252, 40, 1519  
24685, 40253, 40, 1519  

这是一个示例查询,可以实现这一点。

SQL

SELECT t1.Id as t1id, t2.Id as t2id, t3.Id as t3id, t4.Id as t4id
 FROM [dbo].[table1] t1 
 left join [dbo].[table2] t2 on t2.t1_id = t1.Id
 left join [dbo].[table3] t3 on t3.Id = t2.t3_id
 left join [dbo].[table4] t4 on t4.Id = t3.t4_id

代码

我正在处理的代码示例有诸如

之类的示例
var re = Program.db.Database.SqlQuery<List<string>>(sqlQuery).ToList();

【问题讨论】:

  • 你的研究揭示了什么?
  • 进入C#作为什么,一个数组,DataTable,LINQ查询?
  • 我已尝试将 SQl 传递给此,但无法得到明确的响应 db.Database.SqlQuery>(sqlQuery)
  • 任何类型的可遍历数据结构都可以。
  • 我做了研究,但没有帮助我得到答案。我的所有研究都在已知 EF 对象上使用 SQL 找到了简单的结果。仅仅做一个原始查询并将其映射回来并不常见。

标签: c# sql asp.net linq


【解决方案1】:

原来我很接近。

我正在使用它来尝试获得无效的结果

var re = Program.db.Database.SqlQuery<List<string>>(sqlQuery).ToList();

所以我做了一个模型来覆盖结果

class Temp
{
    public int? t1id { get; set; }
    public int? t2id { get; set; }
    public int? t3id { get; set; }
    public int? t4id { get; set; }        

    public Temp()
    {            
    }    
}

成功了

var re = Program.db.Database.SqlQuery<Temp>(sqlQuery).ToList();

这让我在列表中获得 50k 个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2019-10-17
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多