我想寫一個linq到sql方法,它處理ajax網格的排序,分頁和過濾。我創建了一個具有TotalRecordCount的分部類Employee,因爲我需要將它傳遞給javascript來設置分頁器。問題是它不會生成,因爲我不能設置AnonymousType#1.TotalRecordCount,它是隻讀的。但是,如果我選擇「新員工」,那麼它將拋出異常 - 「不允許在查詢中顯式構造實體類型'InVision.Data.Employee'」。Linq to SQL的問題 - 指定列然後修改列
下面的代碼...
public string GetPageJSON(string sortColumn, string sortDirection, int pageNumber, int pageSize, EmployeeSearch search)
{
var query = from e in db.Employees
select new
{
EmployeeID = e.EmployeeID,
FirstName = e.FirstName,
LastName = e.LastName,
LoginName = e.LoginName,
IsLockedOut = e.IsLockedOut,
TotalRecordCount = e.TotalRecordCount
};
//searching.
if (search.FirstName.Length > 0) query = query.Where(e => e.FirstName.Contains(search.FirstName));
if (search.LastName.Length > 0) query = query.Where(e => e.LastName.Contains(search.LastName));
if (search.LoginName.Length > 0) query = query.Where(e => e.LoginName.Contains(search.LoginName));
if (search.Status.Length > 0) query = query.Where(e => (search.Status == "Active" && !e.IsLockedOut)
|| (search.Status == "Inactive" && e.IsLockedOut));
//sorting.
query = query.OrderBy(sortColumn, sortDirection);
//get total record count.
int totalRecordCount = query.Count();
//paging.
query = query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
//set total record count.
var list = query.ToList();
if (list.Count > 0)
{
list[0].TotalRecordCount = totalRecordCount; //throws exception
}
//return json.
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(list);
}
謝謝,但這個不起作用因爲我需要限制我返回的列,以便消息大小更小,同時也因爲當它嘗試抓取所有錯誤(如「字符串必須只是一個字符長」)和循環引用時出錯。 – Justin 2009-06-19 17:36:58