Die richtige Join/GroupJoin Umsetzung

Ich habe versucht, Sie arbeiten mit Join und GroupJoin-Methode. Das problem scheint einfach. Angesichts TableA und TableB wie datamaps so dass:

class MyDataContext : DataContext
{
    public Table<tblA> TableA;
    public Table<tblB> TableB;
}

...Ich bin mit TableA als meine primäre Tabelle und wollen gemeinsam auf einem Feld, CustomerID im TableB abrufen [TableB].[LastName].

Sollte nicht schwer sein, außer, dass ich Schwierigkeiten haben, die Ergebnisse richtig zu arbeiten. TableA hat Aufzeichnungen, die ich will, unabhängig von einem übereinstimmenden CustomerID in TableB eingerichtet. Klingt wie ein left-join - also, Lesen hier, ich ahmte, was @tvanfosson vorgeschlagen:

//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 ist dynamisch, so dass eine Methode erstellt eine dynamische Abfrage:

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;
}

Das problem: ich erhalte den folgenden Fehler:

Konnte nicht format-Knoten 'OptionalValue'
für die Ausführung von SQL.

Ich glaube, es ist in der folgenden code-Zeile:

Owner = owner.Select(o => o.LastName).DefaultIfEmpty()

Was mache ich hier falsch? Ich habe das schreiben GroupJoin als Erweiterung Methode.

InformationsquelleAutor IAbstract | 2010-11-06
Schreibe einen Kommentar