gpt4 book ai didi

c# - 菜鸟的东西 : How to collect data from multiple tables most deftly?

转载 作者:行者123 更新时间:2023-11-30 22:34:29 25 4
gpt4 key购买 nike

我想知道如何使用 C# 最熟练地从多个表中收集数据。我不太习惯 C# 和数据库管理:我听说过 ADO.NET 和 LINQ 以及使用表的简单性,但我还没有时间阅读。

所以我收集数据的方法非常复杂:

        int id = 43;
var collectedData = new System.Collections.Generic.Dictionary<string, string>(); // this will later be all my collected data

// Load from first table
string select1 = "SELECT * FROM table1 WHERE ID = " + id;
DataRow dataRow1= SqlHelper.Execute.SingleRow(select1); // my helperclass returning one single data row of a table
collectedData["Surname"] = dataRow1["Surname"];
collectedData["Name"] = dataRow1["Name"];
collectedData["Age"] = dataRow1["Age"];

// Load from second table
string select2 = "SELECT * FROM table2 WHERE ID = " + id;
DataRow dataRow2= SqlHelper.Execute.SingleRow(select2);
collectedData["Mother"] = dataRow2["Mother"];
collectedData["Father"] = dataRow2["Father"];
collectedData["Job"] = dataRow2["Job"];

// ...

那么,C# 和 .NET 专业人员将如何解决这个问题?我期待着您的代码示例!

最佳答案

如果您使用的是 SQL Server,ADO.NET + LINQ-to-SQL 绝对是最佳选择。

使用 LINQ 的原因:

  1. 它自然适合您的 .NET 代码、IDE 和调试器
  2. 您不必在一个地方维护您的代码而在另一个地方维护您的查询
  3. 您不需要硬编码 SQL 查询,也不必费心去创建参数化 SQL(我认为这真的很痛苦)
  4. 它的编写速度超快,而且非常灵活
  5. 您的代码将更简洁、更小,因为您不必到处都使用 ADO.NET 和数据库管道 - LINQ 会处理所有困难的事情
  6. 您获得了一个不错的实体设计器,允许您从 SQL 连接拖放

不使用 LINQ 的原因:

  1. 如果您必须充分利用查询的性能,LINQ 可能不是最自然的选择,因为 SQL 有时会更加灵活。但您真的应该仔细考虑您的查询,看看是否有更简单的方法。
  2. 有些地方不喜欢安全隐患,因为这些表必须对您的连接用户公开。有些公司只允许通过 SPROC 访问表。

对于您的示例,您需要创建代表您的数据库实体的类 (POCO)。然后您将使用 LINQ 查询表并将数据加载到新的实体对象中。我更喜欢在我的域/实体对象上有一个构造函数,它将 LINQ 生成的持久数据库对象转换为域层对象以供客户端使用。

public class Person
{
public int ID { get; set; }
public string Surname { get; set; }
public string Name { get; set; }
public short Age { get; set; }

public Person()
{
}

public Person( Persistence.Person src )
{
this.ID = src.ID;
this.Surname = src.surname;
this.Name = src.name;
this.Age = src.age;
}
}

...
public List<Domain.Person> LoadPeople()
{
using( var context = this.CreateContext() )
{
var personQuery = from p in context.Persons
select new Domain.Person( p );

return personQuery.ToList();
}
}

public Person LoadPerson( int personID )
{
using( var context = this.CreateContext() )
{
var personQuery = from p in context.Persons
where p.id == personID
select new Domain.Person( p );

return personQuery.SingleOrDefault();
}
}

关于c# - 菜鸟的东西 : How to collect data from multiple tables most deftly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7806109/

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