学习LINQ,试图掌握范式......
我为核心业务对象之一设置了一个 LINQ 表类。我想从数据库中检索这些对象的列表,使用 MS SQL 服务器表对象(即,而不是为所有涉及的数据库表/视图定义单独的 LINQ 类)。我可以使用 LINQ 标准/连接语法,但是对于 ORM 代码块是懒惰/保守的。也许我要求一些非正统的东西,在 LINQ 范式中,我期望我在 LINQ 类中构建数据库结构的 100% 副本,然后只使用这些类进行查询。
学习LINQ,试图掌握范式......
我为核心业务对象之一设置了一个 LINQ 表类。我想从数据库中检索这些对象的列表,使用 MS SQL 服务器表对象(即,而不是为所有涉及的数据库表/视图定义单独的 LINQ 类)。我可以使用 LINQ 标准/连接语法,但是对于 ORM 代码块是懒惰/保守的。也许我要求一些非正统的东西,在 LINQ 范式中,我期望我在 LINQ 类中构建数据库结构的 100% 副本,然后只使用这些类进行查询。
您所描述的具体是 LINQ to SQL / Entity Framework 提供程序,这种行为实际上并不是 LINQ 的产品。您根本不需要任何类来对数据库中的内容进行建模。例如,我在 LINQ to SQL 查询中加入 3 个表,分别称为 a、b 和 c。您可以在语句的最后放置一个 select 并执行以下操作;
RestOfLinqQuery.Select( new { name = a.name, address = b.address, height = c.height } );
这将返回一个由三个表中的属性组成的匿名对象。此外,您可以创建一个具有表 a、b 和 c 中的各种属性的对象,并使用相同的初始化样式,或者创建一个构造函数来接收您要设置的所有字段并创建它。表到对象的映射是由实体框架创建的,LINQ 完全不受此限制。
编辑:这个答案有一个完整查询的好例子,比我的小例子好;如何将 SQL 中的多个内部联接转换为 LINQ? 如您所见,相同类型的初始化用于从多个表中设置新创建对象的属性。
此外,如果您正在开发企业应用程序并遇到此问题,一个好的解决方案是在数据库中创建视图,该视图为您完成所有连接,然后在 C# 中对视图建模,而不是对实际上没有行的表建模表示有用的对象。