数据表LINQ连接c#
本文关键字:连接 LINQ 数据表 | 更新日期: 2023-09-27 18:15:08
我有以下表(DataTable):
CallData
表有字段Strike
, MidPrice
和 PutData
表有字段Strike
和Midprice
,我想在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'
这里甚至不需要匿名类型。只需删除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(...) }
,但正如我已经说过的,你不需要它…