0

目標: SQL ビューから asp.net ページの ListView にデータを表示する 新しいビューを持つ新しいデータベースがあり、それを指す必要があります

エラー:

System.Reflection.TargetInvocationException: '呼び出しのターゲットによって例外がスローされました。' 内部例外 NotSupportedException: 指定された型メンバー 'Alternate_ID' は、LINQ to Entities ではサポートされていません。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポートされています。

System.InvalidOperationException: 'DataBoundControl でページングが有効になっている場合、SelectMethod は IQueryable を返すか、次のすべての必須パラメーターを持つ必要があります: int startRowIndex、int maximumRows、out int totalRowCount'

試してみました: リストビュー、ドキュメント、アイテムタイプ、データ バインディングなどのチュートリアルを調べました。初期化子、エンティティ メンバー、およびエンティティ ナビゲーション プロパティのみがサポート されています。モデル、ビュー、スペル チェック、デザイナー ファイル、pocos などを調べました。

コード:

default.aspx :

 <asp:ListView id="lstClaims" runat="server" ItemType="Placeholder.Data.vx_EligibilitySearch" SelectMethod="lstMembers_GetData" OnItemCommand="lstMembers_ItemCommand" 
        ItemPlaceholderID="litPlaceHolder">
 <LayoutTemplate>
            <div class="table-responsive">
                <table class="table">
                    <thead>
                        <tr>
                            <th></th>
                            <th><asp:LinkButton id="Sort_Claim_Number" runat="server" CommandArgument="Group_Description" CommandName="Sort">Group</asp:LinkButton></th>
                            <th><asp:LinkButton id="Sort_Claim_Status" runat="server" CommandArgument="Group_ID" CommandName="Sort">Group ID</asp:LinkButton></th>
                            <th><asp:LinkButton id="Sort_Plan" runat="server" CommandArgument="Alternate_ID" CommandName="Sort">Member ID</asp:LinkButton></th>

</thead>
                    <asp:Literal ID="litPlaceHolder" runat="server" />
                </table>
            </div>
        </LayoutTemplate>



 <ItemTemplate>
            <tr>
                <td><%# Item.Group_Description %></td>
                <td><%# Item.Group_ID %></td>
                <td><%# Item.Alternate_ID %></td>

  </tr>
        </ItemTemplate>
    </asp:ListView>

注: protected global::System.Web.UI.WebControls.ListView lstClaims; default.aspx.designer.cs にあります

これは [ lstClaims.DataBind(); を指します。] :

  if (memberIDIsValid || memberIsValid)
            {
                ShouldSearch = true;
                lstClaims.DataBind();
            }

これはメソッド内にあります: lnkSearch_Click は、ここの aspx ページから呼び出されます ([検索] ボタンをクリックしたとき):

<p><asp:LinkButton ID="lnkSearch" runat="server" OnClick="lnkSearch_Click" CssClass="btn btn-default"><i class="fa fa-search"></i> Search Members</asp:LinkButton></p>

データを取得する方法:

public IQueryable<vx_EligibilitySearch> lstMembers_GetData()
        {
            litNumSearchResults.Text = "";

            // IQueryable<Member> members = null;
            IQueryable<vx_EligibilitySearch> members = null;


            try
            {
                if (!ShouldSearch)
                    return members;

                panelSearchForm.Visible = false;
                lnkButtonBackToSearch.Visible = true;

                members = GetDataFromQuery();


public IQueryable<vx_EligibilitySearch> GetDataFromQuery()  
        {
            // IQueryable<Member> members = null;
            IQueryable<vx_EligibilitySearch> members = null;



            try
            {
                // members = somedb.Members.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)
                members = somedb.vx_EligibilitySearch.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)


                if (!string.IsNullOrEmpty(Search_MemberID))
                    // members = members.Where(m => m.Subscriber_ID == Search_MemberID).AsQueryable();
                    members = members.Where(m => m.Alternate_ID == Search_MemberID).AsQueryable();

部分クラス vx_EligibilitySearch には次のものがあります。

public string Alternate_ID { get; set; }

もっと:

namespace Placeholder.Data
{
    using System;
    using System.Collections.Generic;

    public partial class vx_EligibilitySearch
    {
        public string Subscriber_ID { get; set; }


        public string Group_Description { get; set; }
        public string Group_ID { get; set; }
        public string Alternate_ID { get; set; }
        public string Member_Name { get; set; }
        public string Sex { get; set; }
        public Nullable<System.DateTime> Birth_Date { get; set; }

DbContext :

members = somedb.vx_EligibilitySearch.AsNoTracking().AsQueryable(); //.OrderBy(a => a.Claim_Number)

somedb の定義に移動すると、次の BasePage.cs に移動します。

protected VBADemoEntities somedb = new VBADemoEntities();

VBADemoEntities の定義に移動すると:

namespace Placeholder.Data

public partial class VBADemoEntities : DbContext
    {
        public VBADemoEntities()
            : base("name=VBADemoEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Auth> Auths { get; set; }
        ...........
        public virtual DbSet<Member> Members { get; set; }
        public virtual DbSet<vx_EligibilitySearch> vx_EligibilitySearch { get; set; }
4

1 に答える 1

0

アクション (クエリ) を実行するには、EF が LINQ ステートメントを SQL クエリに変換する必要があるため、Entity Framework クエリ内でオブジェクト比較を行うことはできません。

于 2018-08-22T18:12:22.527 に答える