2010-01-09 7 views
0

최신 버전의 SubSonic 3 및 ActiveRecord를 사용하고 있습니다. LINQ에서 왼쪽 조인을하려고합니다. 그것은 SubSonic 어딘가에있는 오류로 실패합니다.LINQ Left Join이 SubSonic.Core에서 오류를 발생시킵니다.

Vehicle 객체와 VehicleImage 객체가 있습니다. Vehicle에는 여러 이미지가있을 수 있지만 반드시 필요하지는 않습니다. 따라서 왼쪽 조인이 적절합니다.

이이 스택 트레이스에게 어떤 통찰력 사전에

 
    at SubSonic.Linq.Translation.QueryBinder.ConvertToSequence(Expression expr) 
    at SubSonic.Linq.Translation.QueryBinder.VisitSequence(Expression source) 
    at SubSonic.Linq.Translation.QueryBinder.BindSelectMany(Type resultType, Expression source, LambdaExpression collectionSelector, LambdaExpression resultSelector) 
    at SubSonic.Linq.Translation.QueryBinder.VisitMethodCall(MethodCallExpression m) 
    at SubSonic.Linq.Structure.ExpressionVisitor.Visit(Expression exp) 
    at SubSonic.Linq.Structure.DbExpressionVisitor.Visit(Expression exp) 
    at SubSonic.Linq.Translation.QueryBinder.Visit(Expression exp) 
    at SubSonic.Linq.Translation.QueryBinder.Bind(QueryMapping mapping, Expression expression) 
    at SubSonic.Linq.Structure.QueryMapping.Translate(Expression expression) 
    at SubSonic.Linq.Structure.DbQueryProvider.Translate(Expression expression) 
    at SubSonic.Linq.Structure.DbQueryProvider.GetExecutionPlan(Expression expression) 
    at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) 
    at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) 
    at SubSonic.Linq.Structure.Query`1.GetEnumerator() 
    at System.Linq.SystemCore_EnumerableDebugView`1.get_Items() 

감사하다 내가

The expression of type 'System.Linq.IQueryable`1[<>f__AnonymousType1`2[<>f__AnonymousType0`2[Project.Data.Vehicle,Project.Data.DealerLocation],System.Collections.Generic.IEnumerable`1[Project.Data.VehicleImage]]]' is not a sequence 

을 받기는 오류가 나는

var vehicle = from v in Vehicle.All() 
       join dl in DealerLocation.All() on v.DealerLocationID equals dl.ID 
       join vi in VehicleImage.All() on v.ID equals vi.VehicleID into VehicleImages 
       from vij in VehicleImages.DefaultIfEmpty() 
       && vij.IsPrimary 
       select new 
       { 
        v, vij.Image 
       }; 

을 것입니다.

답변

1

아직까지는 수정 사항이없는 것 같습니다. 단순한 수정 (더러운 것)은 왼쪽 조인을 처리하고 오른쪽의 빈 데이터를 기본 데이터로 채우고 SubSonic이 해당 뷰에 대한 간단한 조인을 수행하는 뷰를 만드는 것입니다.

나는 그것이 끔찍한 것이지만 지금은 해결 된 것을 안다. 이 제한으로 인해 음속이 떨어지는 것을 볼 수 없었습니다. 나는 그것이 곧 수정 될 것이라고 확신한다.

1

Fluent Query를 시도하는 것은 아마도 지금의 해결책 일 수 있습니다. 같은 뭔가 : LiteObject 모든 테이블의 필드를 포함

var DB = new myDB(); 
IList<LiteObject> myLiteObject = DB.Select 
    .From<Table1>() 
    .InnerJoin<Table2>() 
    .LeftOuterJoin<Table3>() 
    .Where(Table1.IdColumn).IsEqualTo(1) 
    .And(Table2.IdColumn).IsEqualTo(2) 
    .ExecuteTypedList<LiteObject>(); 

.

+0

Fluent Query가 현재 필요한 것은 할 수 있지만 다른 문제가 있습니다. 유창한 쿼리 목록의 결과에 여러 테이블의 데이터를 가져 오는 좋은 방법이 없습니다. 열 이름이 다른 테이블과 동일한 위치에 조인되는 여러 테이블이 있습니다. LINQ를 사용하여이 열의 별명을 지정했습니다. 유창한 쿼리는이를 지원하지 않습니다. 따라서 열 이름이 내 클래스의 이름과 일치 할 수 없기 때문에 유형이 지정된 목록을 실행하면 작동하지 않습니다. 나는 Fluent Query에서 뭔가를 놓치고 있습니까? –

+0

사실, 그걸 긁어. Fluent Query는 FindColumn의 열 이름을 테이블로 한정하지 않으므로 결국 같은 열을 많이 반환하게됩니다. 그 모든 종류의 문제가 있습니다. 뷰를 만들 것입니다. –

+0

(입력 열이 간단한 선택) 난 아직 시도하지 않았지만, 워드 프로세서는 말한다 : INT 기록 = 새로운 NorthwindDB.Select ( 새 문자열 [] { ProductTable.ProductIDColumn, Product.ProductNameColumn}) 피하여 () .GetRecordCount(); – Aytek

관련 문제