2015-02-26 4 views
1

Я новичок в asp.net mvc & Я пытаюсь создать сайт с asp.net mvc 4 & EF6 где пользователь может сортировать таблицу после авторизоваться. Я получаю ошибку компиляции: Cannot implicitly convert type System.Linq.IQueryable to System.Collections.Generic.ICollection. Мои коды ниже,Convert System.Linq.IQueryable to System.Collections.Generic.ICollection

Контроллер

public ActionResult Login(string sortOrder) 
    { 
     if (Session["UserNAME"] != null) 
     { 
      ViewBag.CodeSort = String.IsNullOrEmpty(sortOrder) ? "code_desc" : ""; 
      var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable() };  //Error in this line 

      switch (sortOrder) 
      { 
       case "code_desc": 
        sortedOut = sortedOut.OrderByDescending(s => s.MKISTAT_CODE); 
        break; 
       default: 
        sortedOut = sortedOut.OrderBy(s => s.MKISTAT_CODE); 
        break; 
      } 
      return View(sortedOut.ToList()); 
     } 
     else 
     { 
      return RedirectToAction("Home"); 
     } 
    } 

Модель

public class MkistatVsUserLogin 
{ 
    public mkistat mkistats { get; set; } 
    public idx Idxs { get; set; } 
} 

Как я могу решить эту проблему. Нужна эта помощь плохо. Tnx.

ОБНОВЛЕНИЯ

Mkistat Модель

public partial class mkistat 
{ 
    public string MKISTAT_CODE { get; set; } 
    public int MKISTAT_NUMBER { get; set; } 
    public string MKISTAT_QUOTE_BASES { get; set; } 
    public decimal MKISTAT_OPEN_PRICE { get; set; } 
    public decimal MKISTAT_HIGH_PRICE { get; set; } 
    public decimal MKISTAT_LOW_PRICE { get; set; } 
    public decimal MKISTAT_SPOT_TOTAL_VALUE { get; set; } 
    public string MKISTAT_LM_DATE_TIME { get; set; }   
} 
+3

что определение '' mkistat''? –

ответ

1

Вы должны изменить свою модель и установить mkistats типа для IQueryable<mkistat>, вы передаете IQueryable<mkistat> где ваше имущество от типа mkistat не IQueryable<mkistat>, вы должны сделать так:

public class MkistatVsUserLogin 
{ 
    public IQueryable<mkistat> mkistats { get; set; } 
    public idx Idxs { get; set; } 
} 

и теперь в своем действии :

var sortedOut = new MkistatVsUserLogin 
        { 
        mkistats = dsedb.mkistats.AsQueryable(); 
        }; 

Если вы хотите сделать с List<mkistat> htne ваша модель должна быть как:

public class MkistatVsUserLogin 
{ 
    public List<mkistat> mkistats { get; set; } 
    public idx Idxs { get; set; } 
} 

и в действии:

var sortedOut = new MkistatVsUserLogin 
        { 
        mkistats = dsedb.mkistats.ToList(); 
        }; 
+0

tnx. Это сработало. :) –

0

Видимо mkistats внедряющие I общей коллекции, а также по телефону .AsQueryable() вы делаете IQueryable коллекции. Если вам нужно, чтобы он был доступен для запроса, измените mkistats для реализации iQueryable.

В противном случае на него можно позвонить .toList(), но вы потеряете запрашиваемую поддержку и ленивую загрузку, если это важно.

Edit: Похоже, вам не нужно запрашиваемых, так что просто сделать это:

var sortedOut = new MkistatVsUserLogin { mkistats = dsedb.mkistats.AsQueryable().toList() }; 

Вероятно, вы также можете просто оставить как .AsQueryable() и .toList(). Но это не имеет большого значения, и я не могу расшифровать, как ваш код подходит друг к другу.

+0

TnQ. Можете ли вы дать мне объяснение по коду? Это будет очень полезно. –

+0

TnQ. Проверка, работает ли он. –

+0

Ошибка. 'Невозможно неявно преобразовать тип 'System.Collections.Generic.List ' в 'MyMvcProj.Models.mkistat'' –