我正在尝试向与JoinAlias联接的表中添加Where子句,但是似乎没有办法在where子句上指定JoinAlias。
我试图多次连接到同一张表,然后根据用户输入将可变数量的where子句添加到联接中:
var userFilterList = new List<Expression<Func<LocationDb, LocationAttributesDateTimeDb, bool>>>();
Expression <Func<LocationDb, LocationAttributesDateTimeDb, bool>> joinPredicate = (loc, ext) =>
loc.LocationId == ext.LocationId && ext.AttributeId == attributeId;
query = query.Join<LocationAttributesDateTimeDb>(joinPredicate, ctx.JoinAlias($"ext{attributeId}"));
foreach (var item in userFilterList)
{
query = query.Where<LocationDb, LocationAttributesDateTimeDb>(item);
}
主要问题是,似乎没有办法将JoinAlias添加到Where子句中。如果我尝试按原样运行查询,则会遇到有关缺少别名的异常。
如果我尝试以下代码,则会出现编译异常:
query = query.Where<LocationDb, LocationAttributesDateTimeDb>(item, ctx.JoinAlias($"ext{attributeId}"));
有没有一种方法可以将JoinAlias添加到where子句中,而不必将Where子句编写为手动SQL?
或者,是否可以使用其他方法将多个请求缝合到单个Join谓词中?
答案 0 :(得分:1)
请注意,在最新的v5.4.1 pre-release on MyGet JoinAlias()
中已弃用并替换为TableAlias()
,它使用了另一种实现,该实现在走表达式树的同时生成SQL语句时使用别名来代替别名,而{{ 1}}通过在生成的SQL上使用后字符串替换来工作,这更加脆弱。
WHERE语句中没有JoinAlias()
,因为无法确定应在何处使用别名,下面是how to use TableAlias in WHERE条件的一些示例:
TableAlias()