限制GridView的Linq结果列

时间:2011-10-23 15:50:30

标签: c# asp.net linq-to-sql

我在业务层中使用这个静态方法来返回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 个答案:

答案 0 :(得分:2)

除非返回类型是动态的,否则不能从方法返回匿名类型。否则,您需要为select语句中的结果和项目创建一个单独的类。

将签名更改为:

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

然后像这样返回您的查询:

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

或者创建一个类并返回它的列表,而不是使用匿名类型。