gpt4 book ai didi

c# - 在一次调用中从多个表中进行选择

转载 作者:可可西里 更新时间:2023-11-01 08:05:45 24 4
gpt4 key购买 nike

在我的代码中,我有一个页面包含来自 3 个不同表格的信息。为了显示此信息,我进行了 3 个 SQL 选择调用并将它们组合在一个列表中以作为模型传递到我的 View 。我可以通过一次 SQL 调用来完成吗?数据之间没有任何联系。

我的代码:

public ActionResult Index()
{
StorePageData PageData = new StorePageData();
return View(PageData);
}
public class StorePageData
{
public List<Table1Data> Table1 { get; set; }
public List<Table2Data> Table2 { get; set; }
public List<Table3Data> Table3 { get; set; }

public StorePageData()
{
Table1 = //loading from Database1
Table2 = //loading from Database2
Table3 = //loading from Database3
}
}
public class Table1Data
{
public int Id { get; set; }
public double Info1 { get; set; }
public string Info2 { get; set; }
}
public class Table2Data
{
public int Id { get; set; }
public List<int> Info1 { get; set; }
public List<int> Info2 { get; set; }
}
public class Table3Data
{
public int Id { get; set; }
public List<string> Info1 { get; set; }
public List<string> Info2 { get; set; }
}

如果有一种方法可以在一个 SQL 请求中加载所有 3 个表,它将显着缩短该页面的加载时间。

谢谢。

最佳答案

您可以使用 DataReader 在单个请求中获取多个结果集.您可以在有或没有 Entity Framework 的情况下使用它。

如果您使用的是 Entity Framework ,您可以传递 DbDataReader ObjectContext.Translate 将多个结果集转换为请求的对象类型的方法。用于创建数据读取器的命令可以是存储过程,或者您可以简单地使用包含查询的命令来形成多个结果集。

例子

List<Table1> list1;
List<Table2> list2;

using (var cn = new SqlConnection(@"Connection String"))
{
cn.Open();
using (var cmd = cn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM Table1; SELECT * FROM Table2";
var reader = cmd.ExecuteReader();
using (var db = new YourDbContext())
{
var context = ((IObjectContextAdapter)db).ObjectContext;
list1 = context.Translate<Table1>(reader).ToList();
reader.NextResult();
list2 = context.Translate<Table2>(reader).ToList();
}
}
}

如果您使用 SqlDataAdapter ,您可以简单地传递一个包含您的查询的命令,然后使用 Fill , 填充一个数据集。数据适配器本身将使用 DataReader在幕后。

例子

var connectionString = @"Connection String";
var commandText = "SELECT * FROM Table1; SELECT * FROM Table2;";
var ds = new DataSet();
using (var da = new SqlDataAdapter(commandText, connectionString))
{
da.Fill(ds);
}

然后您可以将结果调整为 List<Table1>List<Table2> .

关于c# - 在一次调用中从多个表中进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48562745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com