[英]c# How to query Datatable by LINQ
我知道如何通过 LINQ 查询数据表,但代理名称出现在我无法查询的数据表列中。 看看数据是怎么来的。 附上屏幕截图。
请参阅美银美林或德意志银行,这些是作为一列出现的经纪人名称。
这种方式我一般通过LINQ查询数据表。
ds.Tables[2].AsEnumerable().Where(x => x.Field<int>("EarningID") == earningsid
&& x.Field<string>("EarningsType") == earningsType
&& x.Field<string>("EarningsType") == earningsType
&& x.Field<string>("DisplayInCSM") == DisplayInCSM
&& x.Field<string>("Type") == Type
&& x.Field<string>("Broker") == BrokerCode
&& x.Field<string>("Period") == Period
);
现在告诉我如何在代理名称的 where 条件下再添加一个子句。
我怎么能在 where 子句中提到列名,例如&& x.Field<string>("Deutsche Bank")
结果 LINQ 查询应该返回值说19738.5877
在我上面的 linq 查询中,我在 where 中提到了很少的条件,但我怎么能在 where 中提及德意志银行的列名,我应该得到值19738.5877
请分享正确的 LINQ 查询,我还可以在其他条件下提及列名。 谢谢
我尝试用这种方式查询列,但收到错误附加信息:无法将 DBNull.Value 转换为类型“System.Int32”。 请使用可为空的类型。
private string GetData<T>(DataTable table, DataTable dt, int earningsid, string earningsType, string DisplayInCSM,
string Type, string BrokerCode, string Period, T value) where T : IComparable<T>
{
string brokername = GetBrokerName(dt, BrokerCode);
IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
.Where(r => r.Field<int>("EarningID") == earningsid
&& r.Field<string>("EarningsType") == earningsType
&& r.Field<string>("DisplayInCSM") == DisplayInCSM
&& r.Field<string>("Type") == Type
&& r.Field<string>("Broker") == BrokerCode
&& r.Field<string>("Period") == Period
&& r.Field<T>(brokername).CompareTo(value) >= 0);
string rowValue =(rows.FirstOrDefault()[brokername]==DBNull.Value ? "" : rows.FirstOrDefault()[brokername].ToString());
return rowValue;
}
编辑 1
------
IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
.Where(r => r.Field<int>("EarningID") == earningsid
&& r.Field<string>("EarningsType") == earningsType
&& r.Field<string>("DisplayInCSM") == DisplayInCSM
&& r.Field<string>("Type") == Type
&& r.Field<string>("Broker") == BrokerCode
&& r.Field<string>("Period") == Period
/*&& r.Field<T>(brokername).CompareTo(value) >= 0*/
&& r.Field<object>(brokername) != DBNull.Value);
对于上面的代码,我收到此错误无法将 DBNull.Value 转换为类型“System.Int32”。 请使用可为空的类型。
您不能将int
与System.DbNull
进行比较,这就是异常告诉您的。 您的参数中唯一的int
是earningsid
,实际上您的屏幕截图显示了该列的 null 值。
很好, Field
扩展方法还支持可空类型( r.Field<int?>("...")
):
IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
.Where(r => r.Field<int?>("EarningID") == earningsid
&& so on ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.