如果我有这个SQL查询:
“选择不同的顶部1'PostId'= isnull(RootPost,Id),PostedDateTimeUtc from Post order by PostedDateTimeUtc desc”
我需要使用DataContext枚举结果。也就是说,如何将此SQL发送到DataContext并解析结果?
我该怎么做?匿名返回结果的方法会是什么样的?
答案 0 :(得分:4)
为了执行将从已知实体返回结果的SQL查询,您可以使用DataContext.ExecuteQuery方法:
IEnumerable<Post> = dataContext.ExecuteQuery<Post>(sqlQuery);
对于自定义结果集,Execute方法无法推断和创建匿名类型,但您仍然可以创建一个类,其中包含在自定义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);
查看这篇文章:
答案 1 :(得分:0)
我通常会将结果转储到List&lt;&gt;你正在使用的LINQ对象。
List<Post> posts = new List<Post>();
using(your datacontext)
{
var result = // Your query
posts = result.ToList():
}
return posts;
答案 2 :(得分: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);
我实际上并没有这样做,所以如果有人发现问题,我会解决这个问题。