gpt4 book ai didi

c# - 动态 LINQ 到数据表 : why using hardcode string "it" as DataRow

转载 作者:行者123 更新时间:2023-11-30 12:48:04 25 4
gpt4 key购买 nike

假设我有一个包含三列的 DataTable C1C2C3:

var dt = new DataTable();
dt.Columns.Add("C1", typeof (int));
dt.Columns.Add("C2", typeof (string));
dt.Columns.Add("C3", typeof(string));

dt.Rows.Add(1, "1", "1");
dt.Rows.Add(1, "1", "2");
dt.Rows.Add(1, "2", "2");

我使用 Dynamic Linq on nuget GroupByC1C2 就像下面的代码,它完美地工作:

 var output = dt.AsEnumerable()
.AsQueryable()
.GroupBy("new(it[\"C1\"] as C1, it[\"C2\"] as C2)", "it");

如果您注意到,有一个硬编码字符串 显示为DataRow,我的想法来自:

Dynamic Linq GroupBy

.如果我尝试将 it 更改为字符串 row 例如:

GroupBy("new(row[\"C1\"] as C1, row[\"C2\"] as C2)", "row");

我会得到运行时错误:

No property or field 'row' exists in type 'DataRow'

所以,我不太清楚为什么必须硬编码作为DataRow?这有什么原因吗。

最佳答案

这就是动态 LINQ 提供程序的编写方式。它具有三个在尝试解析 LINQ 表达式时识别的硬编码关键字:itiffnew:

static readonly string keywordIt = "it";
static readonly string keywordIif = "iif";
static readonly string keywordNew = "new";

您可以查看 source如果您想查看更多详细信息,请自行前往 LINQ 程序集。

(顺便说一句:如果我不得不猜测的话,这里的“it”似乎是“identifier token”的缩写。)

关于c# - 动态 LINQ 到数据表 : why using hardcode string "it" as DataRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163985/

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