2

WebGridデータベースからデータを取り込むために使用する MVC3 アプリケーションを作成しました。

私のデータベースにはいくつかの列があります。言う

Id| | FullName| | Phone| |Email

列を並べ替えることができIdます。しかし、他の列を並べ替えようとすると、次のエラーが発生します

タイプ 'MvcApp.Models.Student' をタイプ 'MvcApp.Models.Student' にキャストできません。LINQ to Entities は、EDM プリミティブ型または列挙型のキャストのみをサポートします。

デバッグしてエラーの場所を確認しようとしましたが、並べ替えは完璧であることがわかりましたが、データを返すとviewエラーが発生します

私のビューコード:

@{
    ViewBag.Title = "listStudents";
    Layout = "~/Views/Shared/_Layout.cshtml";
    WebGrid grid = new WebGrid(Model, canPage: true, canSort: true, rowsPerPage: 3); 
}

@grid.Pager(WebGridPagerModes.NextPrevious)
        @grid.GetHtml(  //Error at this line
        htmlAttributes: new { id = "grdListStudents" },
    fillEmptyRows: true,
    headerStyle: "tblHeader",
    tableStyle: "tablestyle",
    mode: WebGridPagerModes.All,
    firstText: "<< First",
    previousText: "< Previous", nextText: "Next >",
    lastText: "Last >>",
    columns: new[]{
        grid.Column("intID","SId",canSort:true),
        grid.Column("strFirstName","Name",canSort:true,format:(item)=>item.strFirstName+"   "+item.strLastName),
        grid.Column("strPhone","Phone",canSort:true),
        grid.Column("strEmail","Email",canSort:true),
    }
    )

コントローラーのコードは次のとおりです。

public readonly IStudentInfo _istudentrepository; 

public studentController( IStudentInfo _iStudentRepository)
{
    this._istudentrepository = _iStudentRepository;
}

public ActionResult listBidder(string sort, string sortdir, int? page)
{
    int startPage = 0;
    IEnumerable<Students> sList;
    if (page.HasValue && page.Value > 0)
    {
        startPage = page.Value;
    }
    sList = _istudentrepository.GetList(startPage, PageSize, sort, sortdir);
    return View(sList);                
}

インターフェイス IStudentInfo のコード:

public interface IStudentInfo
{
    IEnumerable<Students> GetList(int intPage, int intRecords, string strSort, string sortdir);            
}

モデル内のコード:

private MyEntity _entity;

public StudentListRepository(MyEntity Ent)
{
    this._entity = Ent;
}
public IEnumerable<Students> GetList(int intPage, int intRecords, string strSort, string sortdir)
{

    var finalresult = new Students();
    var bidList = (from userInfo in _entity.tbl_UserInf
                   join user in _entity.tbl_User on userInfo.UserId equals user.UserId
                   select new Students()
                   {
                       intID=user.UserId,
                       strFirstName = user.FirstName,
                       strEmail = userInfo.EmailId,
                       intPhone=userInfo.Phone
                   }).OrderByDescending(m => m.intID);
    finalresult.TotalResult = bidList.Count();
    switch (strSort)
    {
        case "intID":
            if (sortdir == "ASC")
            {
                sList = sList.OrderBy(r => r.Id);
            }
            else
            {
                sList= sList.OrderByDescending(r => r.Id);
            }
            break;
        case "strFirstName":
            if (sortdir == "ASC")
            {
                sList = sList.OrderBy(r => r.strFirstName);
            }
            else
            {
                sList= sList.OrderByDescending(r => r.strFirstName);
            }
            break;
        case "strEmail":
            if (sortdir == "ASC")
            {
                sList = sList.OrderBy(r => r.strEmail);
            }
            else
            {
                sList= sList.OrderByDescending(r => r.strEmail);
            }
            break;
        //repeat same for phone
    }

    finalresult.lstStudents = sList.Skip(intPage * intRecords)
                                   .Take(intRecords)
                                   .ToList();
    return sList.AsEnumerable();
}

私のコードで何が間違っていますか? 何が起こっているのか知っている人がいたら教えてください。

助けてください

ありがとう、

4

1 に答える 1

2

使用してみてください:

public ActionResult listBidder(string sort, string sortdir, int? page)
{
        int startPage = 0;
        if (page.HasValue && page.Value > 0)
        {
            startPage = page.Value;
        }
        var sList = _istudentrepository.GetList(startPage, PageSize, sort, sortdir);
        return View(sList);
}

public IEnumerable<Students> GetList(int intPage, int intRecords, string strSort, string sortdir)
{

        var finalresult = new Students();
        var bidList = (from userInfo in _entity.tbl_UserInf
                       join user in _entity.tbl_User on userInfo.UserId equals user.UserId
                       select new Students()
                       {
           intID=user.UserId,
                           strFirstName = user.FirstName,
                           strEmail = userInfo.EmailId,
                           intPhone=userInfo.Phone
                       }).OrderByDescending(m => m.intID);
       finalresult.TotalResult = bidList.Count();
       // There are some sorting and ordering
       finalresult.lstStudents = sList.Skip(intPage * intRecords).Take(intRecords).ToList();
       return bidList.ToArray();

}

于 2012-11-22T19:03:12.130 に答える