次のクエリを Linq to Entities に変換するのに助けが必要です。
select * from tableA a join
tableB b on a.ProductId = b.ProductId and a.UserId = b.UserId
where a.ProductId = 60244
and ((b.Column1 = 33 and b.Column2 >= 3) or (b.Column1 = 24 and b.Column2 >= 2))
この式から始めましたが、リストに基づいて tableB の複雑な条件を作成する方法がわかりません。predicatebuilder のパターンに従おうとしましたが、例が結合されたテーブルを扱っていないため、障害にぶつかりました。
public IList<tableA> GetSomeStuff(int productId, List<tableB> filters)
{
var query = from a in tableA
join b in tableB
on new
{
ProductId = a.ProductId,
UserId = a.UserId
}
equals
new
{
ProductId = b.ProductId,
UserId = b.UserId
}
where a.ProductId == 6544
select a;
var tableBPredicate = PredicateBuilder.True<tableB>();
foreach (var filter in filters)
{
/* build up tableB conditions here */
tableBPredicate = tableBPredicate.And(p => p.Column1 == filter.Column1);
tableBPredicate = tableBPredicate.And(p => p.Column2 => filter.Column2);
}
// this won't compile because query is of type tableA and not tableB
return query.AsExpandable().Where(tableBPredicate).ToList();
}