数据表LINQ连接c#

本文关键字:连接 LINQ 数据表 | 更新日期: 2023-09-27 18:15:08

我有以下表(DataTable):

CallData 表有字段Strike, MidPrice PutData 表有字段StrikeMidprice,我想在Strike上加入它们并选择以下表达式的最小值:

Abs(CallData.MidPrice - PutData.MidPrice)

这是我在LINQ术语中应该看到的样子:

var result = (from CallRow in CallData.AsEnumerable()
              join PutRow in PutData.AsEnumerable()
                on CallRow.Field<int>("Strike") equals PutRow.Field<int>("Strike") 
            select new { Abs(CallRow.Field<double>("MidPrice")
                             - PutRow.Field<double>("MidPrice"))
                       }).Min();

表达式

 Abs(CallRow.Field<double>("MidPrice")  

用波浪线下划线,信息显示:

声明的无效匿名类型成员。匿名类型成员必须用成员声明赋值简单的名称或成员访问。

有什么好主意吗?

编辑:伟大的回答Selman22!我在链接 中找到了以下示例
static void GetNameAndDescription {ProductInfo[] products}
{
Console.WriteLine("Names and Descriptions:")
var nameDesc = from p in product select new {p.Name, p.Description};
}

你知道为什么使用'new'

数据表LINQ连接c#

时这段代码有效吗?

这里甚至不需要匿名类型。只需删除new部分

var result = (from CallRow in CallData.AsEnumerable()
          join PutRow in PutData.AsEnumerable()
          on CallRow.Field<int>("Strike") equals PutRow.Field<int>("Strike") 
          select Abs(CallRow.Field<double>("MidPrice") 
                    - PutRow.Field<double>("MidPrice"))).Min();

错误信息清楚地解释了原因:

匿名类型成员必须使用成员赋值简单名称或成员访问来声明。

在本例中,您有一个复杂的表达式,因此需要将值设置为一个属性以使其工作。如new { value = Abs(...) },但正如我已经说过的,你不需要它…