次のエラーメッセージが表示されます...このプロバイダーは、すべての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のみが有効になっており、並べ替えはできません。このエラーメッセージが表示されるのはなぜですか?