Linq - Как собрать анонимный тип как результат для функции - PullRequest
1 голос
/ 29 ноября 2011

Я использую c # 4 asp.net и EF 4. Я предварительно компилирую запрос, результатом должен быть набор анонимного типа.

В данный момент я использую этот код.

public static readonly Func<CmsConnectionStringEntityDataModel, string, dynamic>     
queryContentsList =
CompiledQuery.Compile<CmsConnectionStringEntityDataModel, string, dynamic>
(
    (ctx, TypeContent) => ctx.CmsContents.Where(c => c.TypeContent == TypeContent 
 & c.IsPublished == true & c.IsDeleted == false)
        .Select(cnt => new
      { 
         cnt.Title, 
         cnt.TitleUrl, 
         cnt.ContentId, 
         cnt.TypeContent, cnt.Summary 
      }
            )
   .OrderByDescending(c => c.ContentId));

Я подозреваю, что ВОЗВРАТ для ФУНКЦИИ Dynamic не работает должным образом, и я получаю эту ошибку

Последовательность содержит более одного элемента enter code here.

Полагаю, мне нужно вернуть для моей функции коллекцию анонимных типов ...

У вас есть идеи, как это сделать? Что я делаю не так? Пожалуйста, отправьте образец кода спасибо!

Обновление:

    public class ConcTypeContents
        {
            public string Title { get; set; }
            public string TitleUrl { get; set; }
            public int ContentId { get; set; }
            public string TypeContent { get; set; }
            public string Summary { get; set; }
        }

        public static readonly Func<CmsConnectionStringEntityDataModel, string, ConcTypeContents> queryContentsList =
CompiledQuery.Compile<CmsConnectionStringEntityDataModel, string, ConcTypeContents>(
    (ctx, TypeContent) => ctx.CmsContents.Where(c => c.TypeContent == TypeContent & c.IsPublished == true & c.IsDeleted == false)
        .Select(cnt => new ConcTypeContents { cnt.Title, cnt.TitleUrl, cnt.ContentId, cnt.TypeContent, cnt.Summary }).OrderByDescending(c => c.ContentId));

1 Ответ

5 голосов
/ 29 ноября 2011

Вы не должны возвращать анонимный тип из метода.Создайте конкретный тип для хранения любых данных, которые в настоящее время хранятся в анонимном типе, и верните его вместо этого.

...
.Select(cnt => 
    new ConcType{ 
        Title = cnt.Title, 
        TitleUrl = cnt.TitleUrl, 
        ContentId = cnt.ContentId, 
        TypeContent = cnt.TypeContent,  
        Summary = cnt.Summary })
...

где:

class ConcType
{
    public string Title {get; set;}
    //etc...
}
...