代码之家  ›  专栏  ›  技术社区  ›  IAbstract

为Linq to DataSet中的.Field<T>()编写通用方法

  •  1
  • IAbstract  · 技术社区  · 15 年前

    我一直在尝试编写一个可重用的泛型方法来查找 DataTable . 到目前为止我所拥有的:

    private static IEnumerable<DataRow> GetRow<FType>(string Tablename, 
        string Fieldname, FType Match)
    {
        var result = from row in dataSet.Tables[Tablename].AsEnumerable()
                     where row.Field<FType>(Fieldname) == Match
                     select row;
    
        return result;
    }
    

    row.Field<FType>(Fieldname) == Match .

    4 回复  |  直到 15 年前
        1
  •  3
  •   Anthony Pegram    15 年前

    替换 == Match 具有 .Equals(Match)

    private static IEnumerable<DataRow> GetRow<FType>(string Tablename, string Fieldname, FType Match)
    {
        var result = from row in dataSet.Tables[Tablename].AsEnumerable()
                     where row.Field<FType>(Fieldname) != null
                     && row.Field<FType>(Fieldname).Equals(Match)
                     select row;
    
        return result;
    } 
    
        2
  •  1
  •   Lee    15 年前

    我会用一个 IEqualityComparer<T>

    private static IEnumerable<DataRow> GetRow<FType>(string Tablename, string Fieldname, FType match)
    {
        IEqualityComparer<FType> comp = EqualityComparer<TField>.Default;
        return dataSet.Tables[Tablename]
            .AsEnumerable()
            .Where(comp.Equals(row.Field<FType>(Fieldname), match));
    }
    
        3
  •  0
  •   cordialgerm    15 年前

        4
  •  0
  •   Gerben Limburg    15 年前

    可以使用运算符重载:

    public static bool operator ==(FType a, FType b)
    {
        // Your code
        // Check here if A and B are equal
    }