J'utilise la dernière version de SubSonic 3 et ActiveRecord. J'essaye de faire une jointure gauche dans LINQ. Il échoue avec une erreur quelque part dans SubSonic.LINQ Left Join provoque une erreur dans SubSonic.Core
J'ai un objet Véhicule et un objet VehicleImage Le véhicule peut avoir plusieurs images, mais ce n'est pas obligatoire. donc une jointure à gauche est appropriée.
C'est ce que je
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
};
Ceci est l'erreur que je reçois
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
Ceci est la trace de la pile
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()
Merci à l'avance pour tout comprendre.
On dirait que la requête Fluent peut faire ce dont j'ai besoin pour le moment mais j'ai un autre problème. Je n'ai pas un bon moyen d'obtenir mes données à partir de plusieurs tables dans les résultats de la liste de requête fluide. J'ai un certain nombre de tables qui sont jointes à où les noms de colonnes sont les mêmes que les autres tables. Avec LINQ, j'utilisais ces colonnes comme alias. La requête courante ne semble pas avoir de support pour cela. L'exécution de la liste typée ne fonctionnera donc pas car les noms de colonnes ne peuvent pas correspondre aux noms de ma classe. Ai-je oublié quelque chose dans Fluent Query? –
En fait, grattez ça. Fluent Query ne table pas les noms de colonnes qualifiées dans FindColumn afin que vous obteniez beaucoup de la même colonne dans votre requête. Cela a toutes sortes de problèmes. Je suppose que je vais créer une vue. –
je n'ai pas essayé encore, mais la docs dit (Simple Sélectionnez avec des colonnes dactylographiées): records int = new NorthwindDB.Select ( nouvelle string [] { ProductTable.ProductIDColumn, Product.ProductNameColumn}) .De() .GetRecordCount(); –
Aytek