gpt4 book ai didi

linq - 加入 LINQ 以避免显式命名 "new {}"中的属性?

转载 作者:行者123 更新时间:2023-12-04 16:00:13 25 4
gpt4 key购买 nike

我想做这样的事情:

    DataTable q = from c in customers
join o in orders on c.Key equals o.Key
into outer
from j in outer.DefaultIfEmpty()
select new { c.*, j.* };

我目前得到的最接近的是以下内容:
    var q = from c in customers
join o in orders on c.Key equals o.Key
into outer
from j in outer.DefaultIfEmpty()
select new { c, j };

我希望我的结果 (q) 包含来自 c 和 j 的所有列。 c 和 j 都包含很多列,所以我不想这样列出它们:
            select new { c.col1, c.col2, etc. }

但我基本上希望最终的 DataTable 由 c.* 和 j.* 组成。

如果我在“select new”中指定所有 c 和 j 列,则此答案(不是已接受的答案,而是其下方的答案)有效:
How to Convert a LINQ result to DATATABLE?
但我想避免将它们全部列出。

最佳答案

首先,我更愿意手动指定列,因为我希望将底层(数据库架构、查询提供程序)对我的应用程序的影响降至最低。但是,如果您真的想这样做,则有一些技巧可以实现。

当您使用 Entity Framework (数据库优先)时:

var qs = ((ObjectQuery)q).ToTraceString();
var ds = new DataSet();
var da = new SqlDataAdapter(qs, new SqlConnection(((EntityConnection)context.Connection).StoreConnection.ConnectionString));
da.Fill(ds, "Result");

这个想法是在实际执行之前捕获发出的 SQL 并用它来填充 DataTable (在 DataSet 中)。

跟Linq-to-sql基本一样,只是获取命令串和连接串的方式不同:
context.GetCommand(q).CommandText
context.Connection.ConnectionString

使用 EF 代码优先:
q.ToString()
context.Database.Connection.ConnectionString

关于linq - 加入 LINQ 以避免显式命名 "new {}"中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144213/

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