2009-07-20 10 views
2

私は、このSQLクエリがある場合:のC#:LINQ to SQLは:実行リテラルクエリ

"PostedDateTimeUtc DESCにより、ポストオーダーから明確なトップ1 'PostId' = ISNULL(RootPost、同上)、PostedDateTimeUtcを選択"

そして、私はDataContextで結果を列挙する必要があります。つまり、このSQLをDataContextに送信して結果を解析するにはどうすればよいですか?

どうすればよいですか?結果を匿名で返すメソッドはどのように見えますか? 、カスタムの結果セットの場合

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

Executeメソッドを使用すると、まだ推論と匿名型を作成することはできませんが、:結果が知られているエンティティを形成返しますSQLクエリを実行するための

答えて

4

、あなたはDataContext.ExecuteQueryメソッドを使用することができますカスタムSQLクエリで選択されたフィールドを含むクラスを作成できます。

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

チェックこの記事:

0

が、私は通常使用しているLINQオブジェクトの一覧<>に結果をダンプします。

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

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

return posts; 
0

LINQ式を試すことができます。このようなものはおそらく動作するはずです。

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

私は実際にこれを実行していないので、誰かが問題を発見した場合、これを修正します。