2008-08-03 16 views

Respuesta

8

una solución, aunque sea uno que difiere de manipulación del valor nulo al código, podrían ser:

DateTime yesterday = DateTime.Now.Date.AddDays (-1);

var collection= 
    from u in db.Universe 
    select new 
    { 
     u.id, 
     u.name, 
     MaxDate =(DateTime?) 
     (
      from h in db.History 
      where u.Id == h.Id 
      && h.dateCol < yesterday 
      select h.dateCol 
     ).Max() 
    }; 

Esto no produce exactamente el mismo SQL, pero proporciona el mismo resultado lógico. Traducir consultas SQL "complejas" a LINQ no siempre es sencillo.

0

Ésta no es una respuesta completa para usted, pero a la izquierda se unen pieza que puede utilizar el operador DefaultIfEmpty así:

var collection = 
from u in db.Universe 
join history in db.History on u.id = history.id into temp 
from h in temp.DefaultIfEmpty() 
where h.dateCol < DateTime.Now.Date.AddDays(-1) 
select u.id, u.name, h.dateCol ?? '1900-01-01' 

no he tenido la necesidad de hacer ningún GroupBy comandos, sin embargo, así que dejé eso para no enviarte por el camino equivocado. Otras dos cosas rápidas para tener en cuenta. No he podido unirme realmente a dos parámetros, aunque como se indicó anteriormente, hay formas de evitarlo. También el ?? el operador funciona muy bien en lugar del isnull en SQL.

0

Querrá utilizar el constructo join into para crear una consulta de grupo.

TestContext db = new TestContext(CreateSparqlTripleStore()); 
var q = from a in db.Album 
     join t in db.Track on a.Name equals t.AlbumName into tracks 
     select new Album{Name = a.Name, Tracks = tracks}; 
foreach(var album in q){ 
    Console.WriteLine(album.Name); 
    foreach (Track track in album.Tracks) 
    { 
     Console.WriteLine(track.Title); 
    } 
} 
1
var collection= 
    from u in db.Universe 
    select new 
    { 
     u.id, 
     u.name, 
     MaxDate =(DateTime?) 
     (
      from h in db.History 
      where u.Id == h.Id 
      && h.dateCol < yesterday 
      select h.dateCol 
     ).Max() 
    }; 

Sólo Youse el código anterior y esto debería funcionar bien!

Cuestiones relacionadas