0

次のコードがあります。無効な引数の理由を理解できます。

 AuditDAL ad = new AuditDAL();
 var agencies = ad.SearchAgencies("Ak001", "");

string col = param.sColumns.Split(',')[param.iSortCol_0];
string orderby = col + " " + param.sSortDir_0;

// 'AMS.Helper.PaginatedList.PaginatedList(System.Linq.IQueryable, int, int)' に最も一致するオーバーロードされたメソッドには、いくつかの無効な引数があります C:\NexGen\AMS\DEV\Source\AMS\Controllers\AuditController.cs

var qry = new PaginatedList<AuditAgency>(agencies, param.iDisplayStart, param.iDisplayLength);

PaginatedList コード:

namespace AMS.Helper
{
    public class PaginatedList<T> : List<T> {

        public int PageIndex  { get; private set; }
        public int PageSize   { get; private set; }
        public int TotalCount { get; private set; }
        public int TotalPages { get; private set; }

        public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
            PageIndex = pageIndex;
            PageSize = pageSize;
            TotalCount = source.Count();
            TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);

            this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
        }

        public bool HasPreviousPage {
            get {
                return (PageIndex > 0);
            }
        }

        public bool HasNextPage {
            get {
                return (PageIndex+1 < TotalPages);
            }
        }
    }
}

検索機関コード:

public IEnumerable<AuditAgency> SearchAgencies(string ori, string name)
        {
            List<AuditAgency> agencies = new List<AuditAgency>();
            using (var conn = new SqlConnection(_connectionString))
            {
                var com = new SqlCommand();
                com.Connection = conn;
                com.CommandType = CommandType.StoredProcedure;
                string term = "Ori";

                if (!String.IsNullOrEmpty(ori))
                {
                    term = "Ori";
                    com.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "@ORI",
                        Value = ori
                    });
                }
                if (!String.IsNullOrEmpty(name))
                {
                    term = "legal_name";
                    com.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "@Name",
                        Value = name
                    });
                }
                com.CommandText = "Audit_Get_Agency_List";
                var adapt = new SqlDataAdapter();
                adapt.SelectCommand = com;
                var dataset = new DataSet();
                adapt.Fill(dataset);

                agencies = (from c in dataset.Tables[0].AsEnumerable()
                            select new AuditAgency()
                            {
                                Agency_ID = Convert.ToInt32(c["Agency_Id"]),
                                Agency_Name = c["Agency_Name"].ToString(),
                                Agency_Ori = c["ORI"].ToString(),
                                COPSAuditNumber = c["COPSAuditNumber"].ToString(),
                                OIGAuditNumber = c["OIGAuditNumber"].ToString()
                            }).ToList<AuditAgency>();

                return agencies;
            }

        }
4

1 に答える 1

0

エラーはどこから始めるべきかを教えてくれるはずです。

デバッガーを起動すると、機関が IEnumberable であることがわかると思いますが、IQueryable ではありません。

SearchAgencies の戻り値の型を IQueryable から IEnumerable に変更して修正します

または、PaginatedList のタイプを変更して、IQueryables の代わりに IEnumberables を受け入れることもできます。IQueryable は IEnumerable から継承するため、これはより安全かもしれません。

( 2 つの違いについては、 http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspxまたは IQueryable、List、IEnumerator の違いを参照してください)

于 2013-06-02T08:41:05.297 に答える