Помогите создать запрос LINQ при использовании анонимных типов

#linq-to-sql

#linq-to-sql

Вопрос:

Я начал с:

 IQueryable<Author> authors2 = db.Authors;
  

Затем я создаю authors2 несколько операторов if, вот один из них

 authors2 = authors2.Where(t => t.ItemAuthors.Any(b => b.Item.CategoryItems.Any(z => z.categoryID == int.Parse(ddlCategory.SelectedValue))));
  

Затем, наконец, я хотел бы добавить это в конец созданных предложений where

 authors2.OrderBy(x => x.text).Select(x => new
            {
                authorText = string.Format("{0} ({1})",x.text, x.ItemAuthors.Count())
            });
  

Для привязки элемента управления, подобного этому:

 ddlAuthor.DataSource = authors2;
            ddlAuthor.DataTextField = "authorText";
            ddlAuthor.DataBind();
  

По-видимому, компилятор не очень доволен моим оператором select new. Как я могу переписать это для достижения той же цели? Я полагаю, что это называется созданием анонимного типа.

Здесь говорится, что существует явное преобразование (вам не хватает приведения?) Я не могу понять, как его выполнить.

Ответ №1:

В вашем третьем операторе возвращаемый тип отличается от authors2, потому что Select проецирует другой тип, отличный от Author

Итак, присвоите значение новой переменной

 var authorsFinal = authors2
                    .OrderBy(x => x.text)
                    .Select(x => new
                    {
                      authorText = string.Format("{0} ({1})",
                                                 x.text, 
                                                 x.ItemAuthors.Count())
                    });