2008-08-03 24 views

उत्तर

8

एक समाधान है, जो कोड को शून्य मान की हैंडलिंग defers हालांकि, हो सकता है:

डेटटाइम कल = डेटटाइम.अब.डेट.एडडेज़ (-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() 
    }; 

यह बिल्कुल वैसा ही एसक्यूएल उत्पादन नहीं करता है, लेकिन एक ही तार्किक परिणाम प्रदान करता है। LINQ के लिए "जटिल" SQL क्वेरी का अनुवाद करना हमेशा सीधा नहीं होता है।

0

यह आप के लिए एक पूरा जवाब नहीं है, लेकिन बाईं तरफ टुकड़ा में शामिल होने के तुम इतनी तरह DefaultIfEmpty ऑपरेटर का उपयोग कर सकते हैं:

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' 

मैं किसी भी GroupBy आदेश करने के लिए अभी तक की जरूरत नहीं पड़ा है, इसलिए मैंने आपको गलत रास्ता नीचे भेजने के लिए छोड़ दिया। ध्यान देने के लिए दो अन्य त्वरित चीजें। मैं वास्तव में दो मानकों पर शामिल होने में असमर्थ रहा हूं, हालांकि ऊपर के रूप में इसके आसपास जाने के तरीके हैं। यह भी ?? ऑपरेटर एसक्यूएल में isnull के स्थान पर वास्तव में अच्छी तरह से काम करता है।

0

आप समूह क्वेरी बनाने के लिए join into निर्माण का उपयोग करना चाहते हैं।

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

बस ऊपर कोड youse और इस ठीक काम करना चाहिए!