Linq只返回表中的选定列

时间:2012-07-04 00:42:49

标签: linq entity-framework

我想只返回LINQ查询中的一些列。我怎么做? 这是asp.net:

    <asp:EntityDataSource ID="RequestorDataEntitySource" runat="server"
        ConnectionString="name=RequestDataEntities" 
        DefaultContainerName="RequestDataEntities" EnableFlattening="False" 
        EntitySetName="requests"
        OnQueryCreated="Requestor_QueryCreated" >
    </asp:EntityDataSource>
    <asp:GridView ID="RequestorGridView" runat="server" 
        DataSourceID="RequestorDataEntitySource">
    </asp:GridView>

背后的代码:

protected void Requestor_QueryCreated(object sender, QueryCreatedEventArgs e)
    {

        var currentRequestor = e.Query.Cast<requests>();
        e.Query = (from rq in currentRequestor
                   where rq.lname == "Somebody"
                   select rq);
    }

这会填满所有20列的网格,但我可以只选择几个特定的​​列(fname,lname,email)吗?我在这个主题上看过很多帖子,但我无法让这些例子适合我。如果我尝试将选择更改为:

   select new { rq.fname, rq.lname }); 

我收到错误:

  

System.InvalidOperationException:QueryCreated事件返回了一个类型为'ObjectQuery 1' when type 'ObjectQuery 1'的查询。

我错过了什么,请指教。

2 个答案:

答案 0 :(得分:0)

也许您需要选择属性:

<asp:EntityDataSource ID="RequestorDataEntitySource" runat="server"
    ConnectionString="name=RequestDataEntities" 
    DefaultContainerName="RequestDataEntities" EnableFlattening="False" 
    EntitySetName="requests"
    Select="it.fname, it.lname"
    OnQueryCreated="Requestor_QueryCreated" >
</asp:EntityDataSource>

答案 1 :(得分:0)

您最初在entitydatasource中选择的内容应与创建的查询中相同。