Asp.net 将QueryXtender与EntityDataSource一起使用时出错-“FirstName”不是“System.Data.Common.DbDatRecord”类型的成员

Asp.net 将QueryXtender与EntityDataSource一起使用时出错-“FirstName”不是“System.Data.Common.DbDatRecord”类型的成员,asp.net,c#-4.0,entitydatasource,Asp.net,C# 4.0,Entitydatasource,下面的GridView带有EntityDataSource,它从包含更多字段的Surveyors表中获取了3个字段,当然它向我展示了每个Surveyors <asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors"> <C

下面的GridView带有EntityDataSource,它从包含更多字段的Surveyors表中获取了3个字段,当然它向我展示了每个Surveyors

<asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors">
  <Columns>
    <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" />
    <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" />
    <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
  </Columns>
</asp:GridView>
<asp:EntityDataSource ID="edsSurveyors" runat="server"
  ConnectionString="name=PLSOEntities"
  DefaultContainerName="PLSOEntities"
  EnableFlattening="False"
  EntitySetName="Surveyors"
  Select="it.[FirstName], it.[LastName], it.[ID]"
  AutoGenerateOrderByClause="true">
  <OrderByParameters>
    <asp:Parameter DefaultValue="LastName" />
  </OrderByParameters>
</asp:EntityDataSource>
我有两个名为txtFirstName和txtLastName的文本框,我希望用户能够使用类似SQL查询的样式进行搜索。网上的一些阅读资料将我引向了QueryXtender。我将代码更改为以下内容:

<asp:GridView ID="gvwSurveyors" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" CellPadding="3" DataSourceID="edsSurveyors">
  <Columns>
    <asp:BoundField DataField="FirstName" HeaderText="FirstName" ReadOnly="True" SortExpression="FirstName" />
      <asp:BoundField DataField="LastName" HeaderText="LastName" ReadOnly="True" SortExpression="LastName" />
      <asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" />
    </Columns>
  </asp:GridView>
  <asp:EntityDataSource ID="edsSurveyors" runat="server"
    ConnectionString="name=PLSOEntities"
    DefaultContainerName="PLSOEntities"
    EnableFlattening="False"
    EntitySetName="Surveyors"
    Select="it.[FirstName], it.[LastName], it.[ID]"
    AutoGenerateOrderByClause="true" onselecting="edsSurveyors_Selecting">
    <OrderByParameters>
      <asp:Parameter DefaultValue="LastName" />
    </OrderByParameters>
  </asp:EntityDataSource>
  <asp:QueryExtender ID="qexSurveyor" runat="server" TargetControlID="edsSurveyors">
    <asp:SearchExpression SearchType="Contains" DataFields="FirstName">
      <asp:ControlParameter ControlID="txtFirstName" />
    </asp:SearchExpression>
  </asp:QueryExtender>
因此,现在当我单击按钮时,会出现错误:“FirstName”不是“System.Data.Common.DbDataRecord”类型的成员


我可以做些什么来允许包含?一旦它起作用,我将添加一个LastName参数,该参数也会起作用。

我目前遇到同样的问题,我发现如果我从EntityDataSource中删除'Select=',它就会起作用。显然,在使用QueryXtender时,您必须选择“全部”。然而,我不想返回表中的每个字段,我还没有找到解决这个问题的方法


那么,有人有解决办法吗?

我在使用AdventureWorks作为数据源时也遇到了同样的问题。我必须从EntityDataSource中删除“Select=”。为了解决这个问题,我转到我的GridView并将AutoGenerateColumns设置为False。然后我手动添加了我想在Gridview中显示的每一列,例如

        <asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
        <asp:BoundField DataField="SalesPerson" HeaderText="Sales Person" />
        <asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
        <asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
        <asp:BoundField DataField="EmailAddress" HeaderText="Email Address" />
        <asp:BoundField DataField="Phone" HeaderText="Phone" />
另一个注意事项是,另一个解决方法似乎是使用onquerycreated事件将LINQ查询应用于EntityDataSource,尽管是通过编程实现的。在这种情况下,您不需要声明性地使用查询扩展程序。全文在此->

        <asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
        <asp:BoundField DataField="SalesPerson" HeaderText="Sales Person" />
        <asp:BoundField DataField="CustomerID" HeaderText="Customer ID" />
        <asp:BoundField DataField="FirstName" HeaderText="First Name" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
        <asp:BoundField DataField="CompanyName" HeaderText="Company Name" />
        <asp:BoundField DataField="EmailAddress" HeaderText="Email Address" />
        <asp:BoundField DataField="Phone" HeaderText="Phone" />