【发布时间】:2019-02-04 06:26:04
【问题描述】:
我经常使用 SQL,并且尝试将相同的连接逻辑传输到针对 DataSet 的 LINQ 查询。 DataSet 是一组从 SQL 查询中提取的表。
我设法让这个加入工作 -
IEnumerable<DataRow> query =
from a in ds.Tables["Names"].AsEnumerable()
join b in ds.Tables["NameHasAffiliate"].AsEnumerable()
on a.Field<int>("PK") equals b.Field<int>("fk_MainTable_PK")
select a;
这不能编译:
select a.Field<int>("PK"), a.Field<string>("Name")
也没有
select new { PK = a.Field<int>("PK"), Name = a.Field<string>("Name") }
它肯定查询正确(我看到预期的行数和重复的表 a 数据)但这只是返回表 a 列 - 显然是因为 select a。
我已尝试更改为 select new { a, b } 并将查询包装在 () 中以在最后添加 .ToList(),但两者都没有编译为我提供查询的 IEnumerable 版本以进行简单的表转换之后使用
DataTable boundTable = query.CopyToDataTable<DataRow>();
如何选择这样的所有列? 或者更确切地说,如果我要加入很多表,如何指定每个表中的哪些列?
【问题讨论】:
-
你可以试试
select a.propertyName, b.proprtyName或select new { Name = a.Name, Name1 = b.Name1 };。 -
你能把
Names和NameHasAffiliate表的attributes都发一下吗? -
如您所见,我没有通过任何类型的数据对象定义属性。我正在在线定义它们,例如
a.Field<int>("PK")并在select部分使用该语法无法编译。 -
我认为这个链接会帮助你。 stackoverflow.com/questions/37849027/…
-
感谢您的建议,但我想也许我只需要创建数据对象,这样我就可以按名称调用属性:/