複数のパラメーターを渡す再利用可能なlinq式を作成しようとしています。
private System.Linq.Expressions.Expression<Func<FeeDetail, FeeDetail, bool>> IsPrevFeeDetail
{
get
{
return (feeLevelDetail, currentFeeLevelDetail) =>
feeLevelDetail.ToDt < currentFeeLevelDetail.FromDt);
}
}
しかし、私が見た式のすべての例は、1つのパラメーター(クエリ対象のエンティティタイプ)のみを取ります。
箱から出してこれを行う方法はありますか?
私の答えの時のあなたの質問は、単に複数のパラメータを持つ式が可能かどうかを尋ねます。それらは使用することができます、そしてそうです。
.Join
そして.GroupJoin
最後のパラメータ、参加して返す単一のエンティティを単一の型を返すの各側面から導出タイプを取り式パラメータとして有し、両方。
tableA.Join(tableB, e => e.Id, e => e.TableAId, (a, b) => new {
IsPrevFee = a.ToDt < b.FromDt,
AEntry = a,
BEntry = b
}).Where(e => e.IsPrevFee);
ただし、質問の例から判断すると、で使用したいようですWhere
。Linqクエリ関数のいずれかが、単一の型のコレクションを戻り値として提供するため、これは機能しません。上で見たように、私は基本的に2つのエンティティの結合を単一のタイプの出力に変換しました。匿名型を使用しましたが、これは具体的な型にすることもでき、結合に再利用可能な式を入力すると、単一入力の式を渡すことができることに注意してください。Where
句。
コメントの編集:
Expression<Func<MyEntity, bool>>
別の引数を閉じることで、を作成できるはずです。私はその場でこれを行っているので、些細な構文エラーは無視してください。ただし、例は次のようになります。
Expression<Func<MyEntity, bool>> GetMyWhereClause(int statusId)
{
return myEntity => myEntity.StatusId == statusId;
}
使用法:
var MyWhereClause = GetMyWhereClause(5);
var result = db.MyEntities.Where(MyWhereClause);
確かではありませんが、LINQ-to-SQLが結果の式を解決できない可能性があるため、これが非プリミティブに対して機能するとは思われません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加