2016-05-24 2 views
1

Ich habe diese Abfrage beitreten, die alle Schulprogramme und Produkte zieht, die in einer Person Warenkorb ist:Wie erstellt man eine Linq Lambda Join-Abfrage, die Ergebnisse zieht, obwohl dort null Ergebnisse?

//this pulls all items the user purchased 
var poop = Context.Query<Cart>().Where(x => x.UserId == currentUserId && x.Status == "Archived") 
    .Select(
     p => new 
     { 
      p.ItemId, 
      p.TypeId, 
      p.PurchaseDate 
     }) 
//This get the media type name of the cart items 
    .Join(
     Context.Query<MediaType>(), 
     t => new {t.TypeId}, 
     m => new {TypeId = m.Id}, 
     (t, m) => new 
     { 
      t.ItemId, 
      t.TypeId, 
      t.PurchaseDate, 
      m.TypeName 
     }).OrderBy(d => d.PurchaseDate) 
//Now i need specifics of the items like name, sku, etc. StartDate will be null for items that are products, but contains DateTime for items that are programs. 
    .Join(
     Context.Query<ProgramProductView>(), 
     e => new {e.ItemId, e.TypeId}, 
     prog => new {ItemId = prog.Id, prog.TypeId}, 
     (e, prog) => new 
     { 
      e.ItemId, 
      e.TypeId, 
      e.PurchaseDate, 
      e.TypeName, 
      prog.FullName, 
      prog.StartDate, 
      prog.Sku, 
      prog.Closed 
     }).OrderBy(d => d.PurchaseDate); 

Also genau dort ist, wo es stürzt ab, weil prog.StartDate für Produkte null ist. Ich bekomme SQL ist nicht verfügbar Fehler.

Gibt es eine Möglichkeit, dass der Join Null-fähige Felder erlaubt? Ich benutze nur Lambda, weil es einfacher zu lesen und zu reinigen ist.

+0

Probieren Sie '(DateTime?) Prog.StartDate' – MaKCbIMKo

+0

* facepalm .... wow das war einfach. Vielen Dank. Kannst du das zur Antwort machen? – NeoSketo

+0

Setzen Sie das einfach in die Antwort. – MaKCbIMKo

Antwort

2

Nun brauchen Sie nur Nullable<> Immobilie für Sie anonyme Klasse in Ihrem letzten Join verwenden:

.Join(
    Context.Query<ProgramProductView>(), 
    e => new {e.ItemId, e.TypeId}, 
    prog => new {ItemId = prog.Id, prog.TypeId}, 
    (e, prog) => 
     new 
     { 
      ... 
      (DateTime?)prog.StartDate, 
      ... 
     }).OrderBy(d => d.PurchaseDate); 

Hoffnung wird es helfen.

+0

wie ein Charme! Danke vielmals! – NeoSketo