gpt4 book ai didi

c# - 在 Linq 查询中执行代码块的语法?

转载 作者:可可西里 更新时间:2023-11-01 07:54:29 25 4
gpt4 key购买 nike

这是一些(显然)无法编译的代码:

var q = from x in myAnonymousTypeCollection
select new {
x.ID,
CalcField = {
switch(x.SomeField) {
case 1:
return Math.Sqrt(x.Field1);
case 2:
return Math.Pow(x.Field2, 2);
default:
return x.Field3;
}
}
};

你明白了;我正在尝试计算 CalcField以完全不同的方式,取决于 SomeField 的值是。我不能使用 Func<> (或者我可以吗?),因为输入类型是匿名的。那么让它工作的正确语法是什么?

最佳答案

首先,对于 Linq,我通常更喜欢方法链语法而不是查询语法。有了它,您可以轻松做到这一点。

var q = myAnonymousTypeCollection
.Select(x =>
{
object calcField;

switch(x.SomeField)
{
case 1:
calcField = Math.Sqrt(x.Field1);
case 2:
calcField = Math.Pow(x.Field2, 2);
default:
calcField = x.Field3;

return new
{
x.ID,
CalcField = calcField
};
});

如果不使用方法链,您需要一个方法或一个 Func。让我们假设一个 Func

//replace these with actual types if you can.
Func<dynamic, dynamic> calculateField =
x =>
{
switch(x.SomeField) {
case 1:
return Math.Sqrt(x.Field1);
case 2:
return Math.Pow(x.Field2, 2);
default:
return x.Field3;
}

var q = from x in myAnonymousTypeCollection
select new { x.Id, CalcField = calculateField(x) };

注意:我不是在 IDE 中编写的,所以请原谅任何简单的错误。

这是 dynamic 的 MSDN .但是,我发现一旦需要开始传递匿名类型,最好创建一个实际的类。

关于c# - 在 Linq 查询中执行代码块的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16466731/

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