使用LINQ查询过滤,但它是选择特定的关键多次
本文关键字:选择 查询 LINQ 过滤 使用 | 更新日期: 2023-09-27 18:16:57
嗨,我正试图从使用LINQ到SQL的表(_dtlayout)查询。我试图选择一个列名FK_DataPoint。但是当我调试它时,它多次击中该列。它不会抛出任何错误,但就性能而言,这是一个主要问题。我知道我正在使用一个Where子句去每一行和过滤它。但是,是否有更好的方法将这些代码放在一起,以便过滤这个DATAPOINT列?谢谢。
int? dataPointKey = _dtLayout.AsEnumerable().Where(row =>
row.Field<int?>"FK_FinancialStatementTemplateSectionItem") ==
colDef.FK_FinancialStatementTemplateSectionItem
&& row.Field<int?>("RowNumber")== columnItem.RowNumber
&& row.Field<int?>("ColumnNumber") ==colDef.ColumnNumber
&& row.Field<int?>("ItemNumber") == columnItem.ItemNumber)
.Select (row=>row.Field<int?>("FK_DataPoint")).FirstOrDefault();
谢谢
您可以使用FirstOrDefault
进行过滤,然后得到您想要的值:
var row = _dtLayout.AsEnumerable().FirstOrDefault(row =>
row.Field<int?>"FK_FinancialStatementTemplateSectionItem") ==
colDef.FK_FinancialStatementTemplateSectionItem
&& row.Field<int?>("RowNumber")== columnItem.RowNumber
&& row.Field<int?>("ColumnNumber") ==colDef.ColumnNumber
&& row.Field<int?>("ItemNumber") == columnItem.ItemNumber);
int? dataPointKey = row != null ? row.Field<int?>("FK_DataPoint") : null;