2011-06-22 10 views
6

Aşağıdaki sorgu başarıyla çalışıyor.Geri dönülemiyor JsonResult

var tabs = (
       from r in db.TabMasters 
       orderby r.colID 
       select new { r.colID, r.FirstName, r.LastName }) 
       .Skip(rows * (page - 1)).Take(rows); 

Şimdi

var jsonData = new 
      { 
       total = (int)Math.Ceiling((float)totalRecords/(float)rows), 
       page = page, 
       records = totalRecords, 
       rows = (from r in tabs 
         select new { id = r.colID, cell = new string[] { r.FirstName, r.LastName } }).ToArray() 
      }; 
return Json(jsonData, JsonRequestBehavior.AllowGet); 

gibi JsonResult dönmek istiyorum Ama olacak gibi bana bir hata veriyor: '[] System.String' sorgu sonucu başlatıldı edilemez dizi türü . Bunun yerine 'System.Collections.Generic.List`1 [System.String]' kullanmayı düşünün.

Beklenen sonucu almak için ne yapmalıyım?

var jsonData = new 
{ 
    total = (int)Math.Ceiling((float)totalRecords/(float)rows), 
    page = page, 
    records = totalRecords, 
    rows = (from r in tabs.AsEnumerable() 
      select new { id = r.colID, 
         cell = new[] { r.FirstName, r.LastName } } 
      ).ToArray() 
}; 
return Json(jsonData, JsonRequestBehavior.AllowGet); 

Sen netlik için, anonim tip başlatıcısı Çek şu sorguyu çekin isteyebilirsiniz:

cevap

8

Ben AsEnumerable() kullanarak bir işlem içi sorgusuna son bölümünü iterek kadar basit şüpheli

var rows = tabs.AsEnumerable() 
       .Select(r => new { id = r.colID, 
            cell = new[] { r.FirstName, r.LastName }) 
       .ToArray(); 

var jsonData = new { 
    total = (int)Math.Ceiling((float)totalRecords/(float)rows), 
    page, 
    records = totalRecords, 
    rows 
}; 
+1

Mükemmel çözüm ...! – imdadhusen

+0

OrderBy sidx ve OrderType ( orderby yeni {r.colID, r.FirstName, r.LastName} seçmek r.colID db.TabMasters içinde R ) sorgu 'var çıkıntıları = aşağıdaki SORD kullanmak nasıl. Atla (satırlar * (sayfa - 1)) Al (satır); ** Siparişi r.colID 'i sidx' e ve azalan ya da '' ** – imdadhusen

+0

@imdadhusen ile değiştirmek istiyorum: Ne demek istediğin belli değil ama ayrı bir soru olarak daha iyi sorulacak gibi görünüyor. –

1

Bu, tabs IQueryable olan LINQ sorgusuna eklenmesidir. Bu, LINQ ifadesini bir SQL sorgusuna döndürmeye çalışıyor ve sağlayıcı projeksiyon dizilerini desteklemiyor.

DB sonuçlarının hemen ardından ve o yerde DB sonuçlarını yansıtmak için ToList öğesini kullanmak üzere sekme değişkeninin LINQ ifadesinin atamasını değiştirebilir veya anonim türün rows alanına atanan LINQ ifadesine .AsEnumerable() ekleyebilirsiniz. bu senin JsonResult. AsEnumerable, IQueryable'ı bir IEnumerable'a indirgeyecek ve bu da ikinci LINQ sorgunuzun DB sorgusuna eklenmesini ve sadece olması gerektiği gibi bir LINQ-to-object çağrısı yapmasını engelleyecektir.

İlgili konular