私は、自分のLinq式を動的に構築し、それらを述部として使用してリストや配列の項目をフィルタリングすることについて、過去2時間の記事とその記事を読んできました。代わりに述語でLinq式を渡すには?
ここで私がこれまで持っているものの簡単な例です:
public class AWDRiskMRASCodeXref
{
public string RiskSubType { get; set; }
public string AcordReqCodeInt { get; set; }
public string MrasReqCodeInt { get; set; }
public string AcordReqCodePpe { get; set; }
public string MrasReqCodePpe { get; set; }
public string AcordReqCodeWeb { get; set; }
public string MrasReqCodeWebS { get; set; }
}
私は、データベースからリストを取得するために、Dapperのようなものを使用します。
var items = conn.Query<AWDRiskMRASCodeXref>("SELECT RiskSubType, AcordReqCodeInt, MrasReqCodeInt, AcordReqCodePpe, MrasReqCodePpe, AcordReqCodeWeb, MrasReqCodeWeb FROM LKUP_AWDRiskMRASCodeXref;").ToList();
var param = Expression.Parameter(typeof(AWDRiskMRASCodeXref), "x");
var member = Expression.Property(param, "AcordReqCodePpe"); //x.AcordReqCodePpe
var constant = Expression.Constant("1004700009");
var body = Expression.Equal(member, constant); //x.AcordReqCodePpe == "1004700009"
var finalExpression = Expression.Lambda<Func<AWDRiskMRASCodeXref, bool>>(body, param); //x => x.AcordReqCodePpe == "1004700009"
finalExpression.Dump();
finalExpressionの「x =>(x.AcordReqCodePpe == 『1004700009』)は」LinqPadで偉大に見えますが、私はそれには、次のLINQクエリを渡すことができるように急行を行うには何が必要です?
var item = items.FirstOrDefault(finalExpression);
問題は、クエリに.ToList()
を呼び出したときにすでにクエリを「解決」しているということです、 スティーブン
すでにマテリアライズされているコレクションで式を使用できませんか? –
できます。 'Dump()'はボディの 'string'を返します。 'finalExpression'で' Compile() 'を呼び出す必要があります。 – JohanP