データ テーブルで動的な linq を実行する方法を作成しようとしています。貼り付けたコードは、作業中の完全なコードではなくテスト コードですが、やろうとしていることを理解するには十分だと思います。 .
基本的に、r => r.Field("field") を置き換えるために使用できる式を含むメソッドに 2 番目のパラメーターを追加したいと考えています。
public string GetStringValueFromData(DataTable data)
{
switch (this.MethodType)
{
case (LabelMethodType.Count):
return data.AsEnumerable().Select(r => r.Field<string>("sometextfield")).Count().ToString();
case (LabelMethodType.Sum):
return data.AsEnumerable().Sum(r => r.Field<decimal>("somenumberfield")).ToString();
case (LabelMethodType.Average):
return data.AsEnumerable().Average(r => r.Field<decimal>("anotherfield")).ToString();
}
return string.Empty;
}
基本的に、メソッドは次のようになります。もちろん、私はこれを試しましたが、コンパイルさえしません。
public string GetStringValueFromData(DataTable data, Expression<Func<DataRow, object>> expression)
{
switch (this.MethodType)
{
case (LabelMethodType.Count):
return data.AsEnumerable().Select(expression).Count().ToString();
case (LabelMethodType.Sum):
return data.AsEnumerable().Sum(expression).ToString();
case (LabelMethodType.Average):
return data.AsEnumerable().Average(expression).ToString();
}
return string.Empty;
}
r => r.Field("sometextfield") または r => r.Field("somenumberfield") のようなものを受け入れるか、または代替アプローチ。
ありがとう
CD