C #: LINQ to SQL: выполнение литерального запроса - PullRequest
2 голосов
/ 20 июля 2009

Если у меня есть этот запрос SQL:

"выбрать различную верхнюю 1 'PostId' = isnull (RootPost, Id), PostedDateTimeUtc из почтового заказа по PostedDateTimeUtc desc"

И мне нужно перечислить результаты с помощью DataContext. То есть, как мне отправить этот SQL-код в DataContext и проанализировать результат?

Как мне это сделать? Как будет выглядеть метод, который возвращает результат анонимно?

Ответы [ 3 ]

4 голосов
/ 20 июля 2009

Для выполнения запросов 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);

Проверьте эту статью:

0 голосов
/ 20 июля 2009

Вы можете попробовать выражение 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);

Я на самом деле не запускал это, поэтому, если кто-то обнаружит проблему, я исправлю это.

0 голосов
/ 20 июля 2009

Я обычно выгружаю результаты в список <> используемого вами объекта LINQ.

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

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

return posts;  
...