【发布时间】:2016-03-01 22:27:19
【问题描述】:
首先阅读:这是应用程序的一部分,它不控制它正在访问的数据库,因此实体框架是不可能的。这是一个非基于 Web 的工具,它将现有数据提取到内存中,但数据库已经创建,并且不受我们控制。
我有一个类,代表我想从多个表中检索的一组数据 (ClassA)
public class ClassA
{
public int ID;
public string Detail;
public List<string> Objects
}
表格看起来像这样:
表1
THISID(int) | SOMETHING1(nvarchar)| SOMETHING2(nvarchar) | OTHERID(int)
1 | foo1 | bar1 | 99
2 | foo2 | bar2 | 98
表 2
TABLE2ID(int) | OTHERID(int) | SOMETHING3(nvarchar)
100 | 99 | somethingA
101 | 99 | somethingB
102 | 99 | somethingC
103 | 98 | somethingA
104 | 98 | something D
我正在使用这样的数据上下文
string connectionString = (user passed in connection string)
string query = @"SELECT t1.THISID AS ID, t1.SOMETHING1 AS Detail, t2.SOMETHING3 AS Objects
FROM Table1 AS t1
JOIN Table2 AS t2
ON t1.OTHERID = t2.OTHERID";
using(DataContext dc = new DataContext(connectionString))
{
List<ClassA> aClasses = dc.ExecuteQuery<ClassA>(query);
}
这显然不起作用,但我不确定是否有办法让 DataContext 或 LINQtoSQL 将查询返回的外部值视为列表(或集合或可枚举)。我知道当您像使用典型的 ORM 一样使用实体框架时,它会为您执行此操作,但是在这里我们将结果集映射到一个对象中,我不确定是否有一种机制可以将连接的数据视为列表中的列表生成的映射对象。
关于如何在一次访问数据库中做到这一点的任何想法? 或者是否有必要从 Table1 中获取第一部分并实例化对象,然后遍历它们并填写它们的列表并额外访问 Table2?
【问题讨论】:
标签: c# sql .net sql-server linq