J'ai essayé de travailler avec la méthode Join et GroupJoin. Le problème semble simple. Compte tenu TableA
et TableB
comme cartes de données tel que:Implémentation correcte Join/GroupJoin
class MyDataContext : DataContext
{
public Table<tblA> TableA;
public Table<tblB> TableB;
}
... J'utilise TableA
comme ma table principale et que vous souhaitez rejoindre sur un champ, dans CustomerID
TableB
pour récupérer [TableB].[LastName]
.
Cela ne devrait pas être difficile, sauf que j'ai de la difficulté à obtenir des résultats satisfaisants. La TableA a des enregistrements que je veux, indépendamment d'un CustomerID correspondant dans la TableB. On dirait une jointure gauche - donc, la lecture here, j'imité ce @tvanfosson suggéré:
// appropriately rewritten for my needs - so I thought...
private static IQueryable GetRecordsByView1(IQueryable<tblA> source)
{
var records = source.GroupJoin(myContext.TableB,
info => info.CustomerID,
owner => owner.CustomerID,
(info, owner) => new
{
info.CustomerID,
Owner = owner.Select(o => o.LastName).DefaultIfEmpty(),
Store = info.Store,
})
.Select(record => new
{
record.CustomerID,
record.Owner,
record.Store,
});
return records;
}
source
est dynamique, telle qu'une méthode crée une requête dynamique:
public static void QueryStores()
{
IQueryable<tblA> source = myContext.TableA;
if (criteriaA)
source = source.Where(// something);
if (criteriaB)
source = source.Where(// something);
// after processing criteria logic, determine type of view
switch (byView)
{
case View1:
{
source = GetRecordsByView1(source);
break;
}
//other case blocks
}
myGridView.DataSource = source;
}
Le problème: Je suis recevoir l'erreur suivante:
Could not format node 'OptionalValue' for execution as SQL.
Je crois qu'il est dans la ligne de code suivante:
Owner = owner.Select(o => o.LastName).DefaultIfEmpty()
Qu'est-ce que je fais mal ici? Je dois écrire GroupJoin
comme une méthode d'extension.
Le problème est que je dois écrire mon 'Join' comme méthode d'extension. Je ne peux pas écrire en tant que déclaration LINQ. – IAbstract