Ограничить столбцы результатов Linq для GridView - PullRequest
1 голос
/ 23 октября 2011

У меня есть этот статический метод в бизнес-слое для возврата Dinners

public static System.Collections.Generic.List<Dinner> GetDinners()
{
    using (DataClassesDataContext h = new DataClassesDataContext())
    {
        var query = (from dins in h.Dinners
                     where dins.Title == "New York"
                     select dins);
        return query.ToList();
    }
}

Я использую его для заполнения сетки на моей странице aspx.

protected void Page_Load(object sender, EventArgs e)
{
    GridView1.DataSource = BusinessLayer.GetDinners();
    GridView1.DataBind();
}

Я хочу ограничитьвозвращенные столбцы на уровне бизнес-уровня.Что я могу сделать в Linq следующим образом.

        var query = (from dins in h.Dinners
                     where dins.Title == "New York"
                     select new { dins.Title, dins.DinnerID });

Но тогда я получаю ошибку анонимного типа, что имеет смысл, но как мне обойти это правильно?

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to   
'System.Collections.Generic.List<Dinner>

1 Ответ

2 голосов
/ 23 октября 2011

Вы не можете возвращать анонимные типы из метода, если тип возвращаемого значения не является динамическим. В противном случае вам нужно создать отдельный класс для результата и спроецировать его в вашем операторе select.

Либо измените подпись следующим образом:

public static System.Collections.Generic.List<dynamic> GetDinners()
{

А затем верните ваш запрос так:

return query.ToList().Cast<dynamic>().ToList();

Или создайте класс и верните его список вместо использования анонимного типа.

...