Не удается неявно преобразовать тип System.web.mvc.JsonResult в System.Generic.IEnumerable - PullRequest
0 голосов
/ 13 июня 2018

В моем контроллере у меня есть действие, которое я хочу / пытаюсь вернуть Json, но я не уверен, почему я получаю эту ошибку, я что-то пропустил ?!Может ли кто-нибудь указать мне в правильном направлении!заранее спасибо:)

RMAHistorik (LikeOrderNummer, From, Amount, SearchRMA, skip) .Select;
System.Web.Mvc.JsonResult 'не содержит определения для' 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
}

/////////////////////////////// update

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());
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Преобразование данных в 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 Я предположил, что model для RMAHistory Viewравен List<RMAHistory> или IEnumerable<RMAHistory>, и он не ожидает какой-либо строки JSON.

0 голосов
/ 13 июня 2018

Вы не можете вызвать метод Select () для jsonResult.Вы могли бы что-то вроде ниже.Дайте мне знать, если это поможет !!

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...