linqのダイナミック列選択
linqクエリで特定の列を動的に選択することは、コンパイル時に列が不明な場合に挑戦することがあります。ただし、選択するために渡されたラムダ式を動的に作成する解決策があります。
次のデータクラスを検討してください:
public class Data
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public string Field4 { get; set; }
public string Field5 { get; set; }
}
特定の列を動的に選択するには、createNewStatementメソッドを使用してラムダ式を動的に作成できます。
private Func CreateNewStatement(string fields)
{
var xParameter = Expression.Parameter(typeof(Data), "o");
var xNew = Expression.New(typeof(Data));
var bindings = fields.Split(',')
.Select(o => o.Trim())
.Select(o =>
{
var mi = typeof(Data).GetProperty(o);
var xOriginal = Expression.Property(xParameter, mi);
return Expression.Bind(mi, xOriginal);
});
var xInit = Expression.MemberInit(xNew, bindings);
var lambda = Expression.Lambda>(xInit, xParameter);
return lambda.Compile();
}
このメソッドは、フィールドのコンマ分離されたリストを文字列として取得し、指定されたフィールドで新しいデータオブジェクトを初期化するラムダ式を動的に生成します。 その後、createNewStatementメソッドを使用してラムダ式を作成し、それを渡して以下を選択できます。
var result = list.select(createNewStatement( "field1、field2"));
var result = list.Select(CreateNewStatement("Field1, Field2"));
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3