使用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();

谢谢

使用LINQ查询过滤,但它是选择特定的关键多次

您可以使用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;