-2

次のエラーメッセージが表示されます...このプロバイダーは、すべてのID列を含むエンティティまたはプロジェクションを返す順序付けされたクエリのみをスキップすることをサポートしています。クエリは単一テーブル(非結合)クエリであるか、Distinct、Except、交差、またはユニオン(連結ではない)操作。

  <asp:DropDownList ID="ddlModels" runat="server" 
                          DataSourceID="ldsListOfModelNos" 
                          DataTextField="EngineModel" 
                          DataValueField="EngineModel" 
                          AppendDataBoundItems="True" 
                          AutoPostBack="true">
      </asp:DropDownList>

       <br/>

       <br />

       <asp:LinqDataSource ID="ldsListOfModelNos" 
                          runat="server" >                              
      </asp:LinqDataSource>


 <asp:GridView ID="gvPriceListByModel" runat="server" EmptyDataText="No Price Info Available"                                                   AutoGenerateColumns="False" CellPadding="4" CellSpacing="4" ForeColor="#333333" GridLines="None" AllowPaging="True"                                             DataSourceID="ldsPBM2" DataKeyNames="EngineSpec">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                 <asp:BoundField DataField="EngineModel" HeaderText="EngineModel" 
                      Visible="False" />
                 <asp:BoundField DataField="EngineSpec" HeaderText="ItemNo"  />
                 <asp:BoundField DataField="NewOrRebuilt" HeaderText="NR" Visible="False" />
                 <asp:BoundField ConvertEmptyStringToNull="False" DataField="RetailPrice" 
                      DataFormatString="{0:c}" HeaderText="Retail Price" />
                 <asp:BoundField DataField="DistributorPrice" DataFormatString="{0:c}" 
                      HeaderText="Distributor Price" />
                 <asp:BoundField DataField="CorePrice" DataFormatString="{0:c}" 
                      HeaderText="Core Price" />
            </Columns>
            <EditRowStyle BackColor="#999999" />
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

       </asp:GridView>


Protected Sub ldsPriceListByModel2_Selecting(sender As Object, e As  System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles ldsPriceListByModel2.Selecting
      If Not IsPostBack Then
           Dim sd As SessionData = Session("SessionData")
           sd.CmpCode = "95102"
           Dim cmpCode = sd.CmpCode
           Dim interimResult = dataUtil.GetQueryablePriceList(cmpCode)

           e.Result = interimResult.Where(Function(m) m.EngineModel = ddlModels.SelectedValue).OrderBy(Function(o) o.EngineSpec)
      End If

 End Sub

                Public Class DataUtils

                Private dc As DataAccess

                 Public Function GetQueryablePriceList(cmpCode As String) As IQueryable(Of PriceInfo)

  dc = New DataAccessClass(ConfigurationManager.ConnectionStrings("xxx").ConnectionString.ToString())

      Dim PriceListQuery = (From ms In dc.dbo.v_ModelSpecs
              Join pl In dc.dbo.v_pricelists
              On ms.item_no Equals pl.item_no
              Join ci In dc.dbo.cxabcx_VWs
              On pl.accounttypecode Equals ci.AccountTypeCode
              Where (pl.price <> 0 And ci.cmp_code = cmpCode)
          Select New PriceInfo() With {.EngineModel = ms.Model,
                                       .EngineSpec = ms.item_no,
                                       .NewOrRebuilt = IIf(pl.item_desc_1 = "ENGINE - NEW", "N", "R"),
                                       .RetailPrice = pl.price, .DistributorPrice = pl.disc_price,  .CorePrice = pl.sls_price}).AsQueryable()

      Return PriceListQuery
 End Function

Public Class PriceInfo

 Public Sub New()

 End Sub

 Public Property EngineModel As String

 Public Property EngineSpec As String

 Public Property NewOrRebuilt As Char

 Public Property RetailPrice As Decimal

 Public Property DistributorPrice As Decimal

 Public Property CorePrice As Decimal

End Class

これは古典的な1対多のシナリオであり、1つのエンジンモデルで多くのエンジン仕様があります...ドロップダウンリスト(ddlModels)からのキー選択によって駆動されるグリッドビュー。エンジンモデルを選択すると、グリッドビューテーブルに価格表の詳細が表示されます。私のLINQクエリは、DataUtilsと呼ばれるデータアクセスクラスに分離されています。LINQDATASOURCE(lds)のselectingイベントで、e.Resultsプロパティを最初のクエリの結果に割り当てますが、エンドユーザーがddlModelsを介して選択したEngineModelによって(WHERE)フィルター処理しました。gridviewでは、Paginのみが有効になっており、並べ替えはできません。このエラーメッセージが表示されるのはなぜですか?

4

2 に答える 2

1

このLinqtoSQLクエリを、データを取得するためにパラメーター化されたストアドプロシージャに置き換えます。SPはビュー内のデータをクエリできるため、機能するはずです。

それか、DevExpressをすべて一緒にドロップします

于 2013-01-09T16:41:02.130 に答える
1

簡単に言うと、linqdatasourceオブジェクトの制限に遭遇したようです。データソースを使用せずに手動でバインドしてみる必要がある場合があります。単純なフラットテーブルマッピングを扱っているだけでない限り、ほとんどの場合、LinqDataSourceを定期的に避けています。

または、PriceInfoオブジェクトの定義の列に属性を追加してみることができますが、このオプションはテストされていません。

この検索から、さまざまなフォーラム投稿の提案を確認することをお勧めします:http: //www.bing.com/search? q=%22This+provider+supports+Skip+only+over+ordered+queries+returning+entities +または+projections+ that + contains + all + Identity + columns%22&qs = n&form = QBRE&pq =%22this + Provider + support + skip + only + over + ordered + queries + returning + entity + or + projects + that + contains + all + Identity + columns%22&sc = 0-0&sp = -1&sk =

于 2013-01-09T16:29:06.457 に答える