簡體   English   中英

無法將類型System.web.mvc.JsonResult隱式轉換為System.Generic.IEnumerable

[英]Cannot implicitly Convert type System.web.mvc.JsonResult to System.Generic.IEnumerable

在我的Controller中,我有Action,我想要/嘗試返回Json,但是我不確定為什么會收到此錯誤,我錯過了什么嗎? 誰能指出我的正確方向! 提前致謝 :)

RMAHistorik(LikeOrderNummer,發件人,金額,SearchRMA,跳過)。
System.Web.Mvc.JsonResult'不包含'Select'的定義,找不到擴展方法'Select'接受類型為'System.Web.Mvc.JsonResult'的第一個參數(是否缺少using指令或組裝參考?)

控制器:

public ActionResult RMAHistory()
{
    return View(RMAHistorik("", 0, 10, true, 0));
}

[HttpGet]
public JsonResult RMAHistorik(string LikeOrderNummer, int From, int Amount, bool SearchRMA, int skip)
{

    RMAHistory rma = new RMAHistory();
    string EmailID = Session["Email"].ToString();

    var query = db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y }).Where(a => a.y.Email == EmailID && LikeOrderNummer == "" ? true : a.y.Ordrenummer.StartsWith(LikeOrderNummer.Trim()) || a.y.Fakturnummer.StartsWith(LikeOrderNummer.Trim())).Distinct().Select(t => new RMAHistory
    {
        Status = t.u.Status,
        RMASendDato = t.y.RMASendDato,
    }).OrderByDescending(t => t.OrdreDato).Skip(skip).Take(Amount).ToList();

    return Json(query,JsonRequestBehavior.AllowGet); //Error here
}

///////////////////////////////更新

public string JsonRMAHistory(string LikeOrderNummer, int From, int Amount, bool SearchRMA, bool Searching, int skip)
{
    if (Searching)
    {
        skip = 0;
    }

    string EmailID = Session["Email"].ToString();
    return Newtonsoft.Json.JsonConvert.SerializeObject(RMAHistorik(LikeOrderNummer, From, Amount, SearchRMA, skip).Select(t => new
    {
        RMASendDato = t.RMASendDato.ToString("dd/MM/yyy"),
        OrdreDato = t.OrdreDato.ToString("dd/MM/yyy"),
        Varenummer = t.Varenummer,
        Referencenummer = t.Referencenummer,
        AntalRMA = t.AntalRMA,
        Fakturnummer = t.Fakturnummer,
        Ordrenummer = t.Ordrenummer,
        Status = t.Status,
        Email = EmailID

    }).Where(l => l.Email == EmailID).Distinct());
}

您不能在jsonResult上調用Select()方法。 您可以像下面這樣。 讓我知道這是否有幫助!

public ActionResult RMAHistory()
{
    return View(RMAHistorik("", 0, 10, true, 0));
}

[HttpGet]
public JsonResult RMAHistorik(string LikeOrderNummer, int From, int Amount, bool SearchRMA, int skip)
{
    var query = GetData(LikeOrderNummer, Amount, skip).ToList();

    return Json(query,JsonRequestBehavior.AllowGet);
}

public string JsonRMAHistory(string LikeOrderNummer, int From, int Amount, bool SearchRMA, bool Searching, int skip)
{
    if (Searching)
    {
        skip = 0;
    }

    string EmailID = Session["Email"].ToString();
    return Newtonsoft.Json.JsonConvert.SerializeObject(GetData(LikeOrderNummer, Amount, skip).Select(t => new
    {
        RMASendDato = t.RMASendDato.ToString("dd/MM/yyy"),
        OrdreDato = t.OrdreDato.ToString("dd/MM/yyy"),
        Varenummer = t.Varenummer,
        Referencenummer = t.Referencenummer,
        AntalRMA = t.AntalRMA,
        Fakturnummer = t.Fakturnummer,
        Ordrenummer = t.Ordrenummer,
        Status = t.Status,
        Email = EmailID

    }).Where(l => l.Email == EmailID).Distinct());
}

private IEnumerable<RMAHistory> GetData(string LikeOrderNummer, int Amount, int skip)
{
    RMAHistory rma = new RMAHistory();
    string EmailID = Convert.ToString(HttpContext.Current.Session["Email"]);

    return db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y }).Where(a => a.y.Email == EmailID && LikeOrderNummer == "" ? true : a.y.Ordrenummer.StartsWith(LikeOrderNummer.Trim()) || a.y.Fakturnummer.StartsWith(LikeOrderNummer.Trim())).Distinct().Select(t => new RMAHistory
    {
        Status = t.u.Status,
        RMASendDato = t.y.RMASendDato,

    }).OrderByDescending(t => t.OrdreDato).Skip(skip).Take(Amount).ToList();
}

將數據轉換為JSON,然后立即將其立即再次轉換回去,這沒有任何意義-效率不高,也無法幫助您解決問題。

相反,請創建一個單獨的方法,該方法公開您要在這兩種操作方法之間共享的查詢功能,並且可以重復使用。 這從返回給用戶的格式中提取了查詢的執行和結果集的創建。

public ActionResult RMAHistory()
{
    return View(getRMAHistory("", 0, 10, 0));
}

[HttpGet]
public JsonResult RMAHistorik(string LikeOrderNummer, int From, int Amount, int skip)
{
   List<RMAHistory> results = getRMAHistory(LikeOrderNummer, From, Amount, skip);
   return Json(results, JsonRequestBehavior.AllowGet);
}

//private method to allow RMAHistory query to be re-used in both action methods
private List<RMAHistory> getRMAHistory(string LikeOrderNummer, int From, int Amount, int skip)
{
    string EmailID = Session["Email"].ToString();

    List<RMAHistory> query = db.RMAStatus
      .Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y })
      .Where(a => a.y.Email == EmailID && LikeOrderNummer == "" ? true : a.y.Ordrenummer.StartsWith(LikeOrderNummer.Trim()) || a.y.Fakturnummer.StartsWith(LikeOrderNummer.Trim()))
      .Distinct()
      .Select(t => new RMAHistory
      {
          Status = t.u.Status,
          RMASendDato = t.y.RMASendDato,
      })
      .OrderByDescending(t => t.OrdreDato)
      .Skip(skip)
      .Take(Amount)
      .ToList();

    return query;
}

PS我已經假定RMAHistory視圖的modelList<RMAHistory>IEnumerable<RMAHistory> ,並且它不期望使用某些JSON字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM