Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询的问题_C#_Linq_Kendo Grid - Fatal编程技术网

C# LINQ查询的问题

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

我正在使用KendoUIMVC包装器来创建网格

控制器中的代码如下所示:

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的转换无效感谢你花时间尝试回答这个问题。这个问题的结构很糟糕,没有解释我真正的问题。你的回答让我走上了正确的轨道,找到了我想要的答案