2009-07-20 4 views
2

Wenn ich diese SQL-Abfrage:C#: LINQ to SQL: Ausführen von wörtlicher Abfrage

"select distinct Top-1 'postID' = isnull (RootPost, Id), PostedDateTimeUtc von Post Bestellung von PostedDateTimeUtc desc"

Und ich muss die Ergebnisse mit einem DataContext auflisten. Das heißt, wie sende ich diese SQL an einen DataContext und parse das Ergebnis?

Wie mache ich das? Wie sieht eine Methode aus, die das Ergebnis anonym zurückgibt?

Antwort

4

Für SQL-Abfragen ausgeführt werden, die Ergebnisse bilden eine bekannte Einheit zurückkehren, könnten Sie die DataContext.ExecuteQuery Methode verwenden:

IEnumerable<Post> = dataContext.ExecuteQuery<Post>(sqlQuery); 

Für benutzerdefinierte Ergebnismengen kann die Methode Execute nicht schließen und den anonymen Typ erstellen, aber Sie haben noch kann eine Klasse erstellen, die die Felder enthält, die in Ihrer benutzerdefinierten SQL-Abfrage ausgewählt sind.

class CustomPostResult // custom type for the results 
{ 
    public int? PostId { get; set; } 
    public DateTime PostedDateUtcTime { get; set; } 
} 

//... 

string sqlQuery = @"SELECT DISTINCT TOP 1 'PostId' = ISNULL(RootPost,Id), 
        PostedDateTimeUtc FROM Post ORDER BY PostedDateTimeUtc DESC"; 

IEnumerable<CustomPostResult> = dataContext. 
             ExecuteQuery<CustomPostResult>(sqlQuery); 

prüfen Sie diesen Artikel:

0

ich Dump in der Regel die Ergebnisse in eine Liste <> des LINQ-Objekt Sie verwenden.

List<Post> posts = new List<Post>(); 

using(your datacontext) 
{ 
    var result = // Your query 
    posts = result.ToList(): 
} 

return posts; 
0

Sie könnten einen LINQ-Ausdruck versuchen. So etwas sollte wahrscheinlich funktionieren.

var results = (from post in dc.Posts 
       orderby post.PostedDateUtcTime descending 
       select new Post 
         { 
          RootPost = (post.RootPost == null) ? post.Id : post.RootPost 
         }).Distinct<Post>().Take<Post>(1); 

Ich habe dies nicht eigentlich lief, also wenn jemand ein Problem findet diese werde ich beheben.