Вобщемс бяда какая-то с 2 джоинами (ломается на втором джоине, если один из джоинов убрать — работает):
public class Entity
{
public Int32 Id { get; set; }
}
public abstract class Master
{
[PrimaryKey]
public abstract int MasterId {get; set;}
public abstract List<Detail> Details {get; set;}
public abstract string Name {get; set;}
}
[MapField("Master1Id", "Master1.MasterId")]
[MapField("Master2Id", "Master2.MasterId")]
public class DetailTwoHead : Entity
{
public Master Master1 { get; set; }
public Master Master2 { get; set; }
}
[Test]
public void TwoJoinCase()
{
using (var db = GetDbManager())
{
var visitsFiltered = from detail in db.GetTable<DetailTwoHead>()
join master1 in db.GetTable<Master>() on detail.Master1.MasterId equals master1.MasterId
join master2 in db.GetTable<Master>() on detail.Master1.MasterId equals master2.MasterId
select detail;
var res = visitsFiltered.ToList();
}
}
ломается так:
BLToolkit.Data.Linq.LinqException : '<>h__TransparentIdentifier1.detail.Master2.MasterId' cannot be converted to SQL.
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseExpression(LambdaInfo lambda, Expression expression, QuerySource[] queries) в ExpressionParser.QueryBuilder.cs: line 1567
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseJoin(Expression inner, LambdaInfo outerKeySelector, LambdaInfo innerKeySelector, LambdaInfo resultSelector, QuerySource outerSource) в ExpressionParser.Parsing.cs: line 1060
в BLToolkit.Data.Linq.ExpressionParserOld`1.<>c__DisplayClass186.<ParseSequenceInternal>b__114(Expression i, LambdaInfo l2, LambdaInfo l3, LambdaInfo l4) в ExpressionParser.Parsing.cs: line 455
в BLToolkit.Linq.ExpressionHelper.IsQueryableMethod(MethodCallExpression pi, String methodName, Action`1 seq, Action`4 parms) в ExpressionHelper.cs: line 241
в BLToolkit.Data.Linq.ExpressionParserOld`1.<>c__DisplayClass186.<ParseSequenceInternal>b__112(MethodCallExpression pi) в ExpressionParser.Parsing.cs: line 455
в BLToolkit.Linq.ExpressionHelper.Match(T expr, Func`2[] matches) в ExpressionHelper.cs: line 390
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseSequenceInternal(Expression info) в ExpressionParser.Parsing.cs: line 380
в BLToolkit.Data.Linq.ExpressionParserOld`1.ParseSequence(Expression info) в ExpressionParser.Parsing.cs: line 247
в BLToolkit.Data.Linq.ExpressionParserOld`1.<Parse>b__ed(Expression pi) в ExpressionParser.Parsing.cs: line 111
в BLToolkit.Linq.ExpressionHelper.Match(T expr, Func`2[] matches) в ExpressionHelper.cs: line 390
в BLToolkit.Data.Linq.ExpressionParserOld`1.Parse(String contextID, MappingSchema mappingSchema, Func`1 createSqlProvider, Expression expression, ParameterExpression[] compiledParameters) в ExpressionParser.Parsing.cs: line 86
в BLToolkit.Data.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr) в Query.cs: line 131
в BLToolkit.Data.Linq.Table`1.GetQuery(Expression expression, Boolean cache) в TableT.cs: line 106
в BLToolkit.Data.Linq.Table`1.Execute(IDataContextInfo dataContextInfo, Expression expression) в TableT.cs: line 98
в BLToolkit.Data.Linq.Table`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() в TableT.cs: line 193
в System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
в System.Linq.Enumerable.ToList(IEnumerable`1 source)