C# LINQ查询的问题
我正在使用KendoUIMVC包装器来创建网格 控制器中的代码如下所示:C# LINQ查询的问题,c#,linq,kendo-grid,C#,Linq,Kendo Grid,我正在使用KendoUIMVC包装器来创建网格 控制器中的代码如下所示: public ActionResult GetFaxHistory([DataSourceRequest] DataSourceRequest request) { using (var faxHistory = new waldenEntities()) { IQueryable<FaxesSendServer> faxHistoryJson = (Sy
public ActionResult GetFaxHistory([DataSourceRequest] DataSourceRequest request)
{
using (var faxHistory = new waldenEntities())
{
IQueryable<FaxesSendServer> faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"));
return Json(result, JsonRequestBehavior.AllowGet);
}
}
public ActionResult GetFaxHistory([DataSourceRequest] DataSourceRequest request)
{
using (var faxHistory = new waldenEntities())
{
IQueryable<FaxesSendServer> faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"));
IQueryable faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Select(c => c.Status);
}
}
using (var faxHistory = new waldenEntities())
{
var query = from c in faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"))
select new
{
c.SendID,
c.Status,
c.FaxName,
c.CreateTime,
c.CompletionTime,
c.PageCount,
c.RecipientName,
c.Notes
};
var faxHistoryJson = from c in query.AsEnumerable()
select new
{
c.SendID,
c.Status,
c.FaxName,
CreateTime = c.CreateTime.ToShortDateString() + " " + c.CreateTime.ToShortTimeString(),
c.CompletionTime,
c.PageCount,
c.RecipientName,
c.Notes
};
DataSourceResult result = faxHistoryJson.ToDataSourceResult(request);
return Json(result, JsonRequestBehavior.AllowGet);
}
这段代码可以正常工作并创建网格,没有任何问题。当我尝试选择特定字段时,出现错误:
我使用的代码如下:
public ActionResult GetFaxHistory([DataSourceRequest] DataSourceRequest request)
{
using (var faxHistory = new waldenEntities())
{
IQueryable<FaxesSendServer> faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"));
return Json(result, JsonRequestBehavior.AllowGet);
}
}
public ActionResult GetFaxHistory([DataSourceRequest] DataSourceRequest request)
{
using (var faxHistory = new waldenEntities())
{
IQueryable<FaxesSendServer> faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"));
IQueryable faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Select(c => c.Status);
}
}
using (var faxHistory = new waldenEntities())
{
var query = from c in faxHistory.FaxesSendServers.Where(p => p.UserID.Contains("walden"))
select new
{
c.SendID,
c.Status,
c.FaxName,
c.CreateTime,
c.CompletionTime,
c.PageCount,
c.RecipientName,
c.Notes
};
var faxHistoryJson = from c in query.AsEnumerable()
select new
{
c.SendID,
c.Status,
c.FaxName,
CreateTime = c.CreateTime.ToShortDateString() + " " + c.CreateTime.ToShortTimeString(),
c.CompletionTime,
c.PageCount,
c.RecipientName,
c.Notes
};
DataSourceResult result = faxHistoryJson.ToDataSourceResult(request);
return Json(result, JsonRequestBehavior.AllowGet);
}
我得到的错误如下
用户代码未处理System.InvalidCastException
消息=无法强制转换类型为的对象
输入'System.Data.Objects.ObjectQuery1[System.String]'
'System.Linq.IQueryable1[WaldenCompleteFaxWeb.Models.FaxesSendServer]'。
Source=WaldenCompleteFaxWeb StackTrace:
在WaldenCompleteFaxWeb.Controllers.HomeController.GetFaxHistoryDataSourceRequest
C:\waldenltd\Customer中的请求
Applications\WaldenCompleteFaxWeb\WaldenCompleteFaxWeb\Controllers\HomeController.cs:line
48
在lambda_methodClosure,ControllerBase,Object[]
在System.Web.Mvc.ActionMethodDispatcher.ExecuteControllerBase controller中,对象[]参数
位于System.Web.Mvc.ReflectedActionDescriptor.ExecuteControllerContext
controllerContext,IDictionary2参数
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodControllerContext
controllerContext,ActionDescriptor ActionDescriptor,IDictionary2
参数
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_DisplayClass42.b_41
在System.Web.Mvc.Async.AsyncResultRapper.c_DisplayClass81.b_uu7iAsyncResult
_
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult1.End
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodIAsyncResult
异步结果
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_DisplayClass37.c_DisplayClass39.b_33
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_DisplayClass4f.b_49
内部异常:
我做错了什么?faxHistoryJson将是一组字符串,而不是FaxesSendServer,因为您选择的是状态。看起来像是c。状态返回的不是FaxesSendServer 如果它返回字符串,则需要将其更改为以下内容:
IQueryable faxHistoryJson =
(IQueryable<string>)faxHistory.FaxesSendServers.Select(c => c.Status);
// note the change ^
Select语句会更改结果输出类型
第一条语句只是过滤集合并仍然检索FaxesSendServer,但您的语句会获取列状态的类型,可能是int或string。LINQ follow deferred execution。这意味着只有在尝试访问结果时才会触发执行。这就是为什么一开始你没有得到任何例外。此外,您可能需要将源代码转换为IQueryable或在投影上使用asQueryable扩展方法。问题在于它的构造很差。我给出的代码示例没有充分描述我遇到的问题 公共操作结果GetFaxHistory[DataSourceRequest]DataSourceRequest请求 { 使用var faxHistory=新的waldenenties { IQueryable faxHistoryJson =System.Linq.IQueryablefaxHistory.FaxesSendServers.Wherep=>p.UserID.Containswalden
IQueryable faxHistoryJson
= (System.Linq.IQueryable<WaldenCompleteFaxWeb.Models.FaxesSendServer>)faxHistory.FaxesSendServers.Select(c => c.Status);
}
}
第一条LINQ语句似乎是创建投影的正确方法。第二条LINQ语句用于格式化日期字段,使其正确显示在Kendo UI网格中您的代码是否编译?您对两个查询结果使用了相同的变量名?是。两个示例中的代码都编译。The first code sampleusing no select不会出错。select示例代码会出错。为什么选择所有字段会按预期工作,当我执行select时,我会出现上面的错误?至少我收到一个错误,称名为“faxHistoryJson”的局部变量已在该范围内声明。因此,对IQueryable的转换无效感谢你花时间尝试回答这个问题。这个问题的结构很糟糕,没有解释我真正的问题。你的回答让我走上了正确的轨道,找到了我想要的答案