2012-07-09 63 views
0
var result = (from p in productInQuery 
    join o in orderInfoQuery on p.refNo equals o.refNo 
    join x in productQuery on p.productNo equals x.no 
    join t in productOutQuery on p.no equals t.productInNo into productIn 
    from t in productIn.DefaultIfEmpty() 
    orderby o.processDate descending 
    select new 
    { 
     qty = p.qty, 
     dateIn = o.processDate, 
     dateOut = (DateTime?)(from m in orderInfoQuery where m.refNo == t.refNo select m.processDate).FirstOrDefault(), 
     etaDate = (DateTime?)(from w in orderInfoQuery where w.refNo == t.refNo select w.eta).FirstOrDefault(), 
    }) 

    if (etaDate != DateTime.MinValue) 
    { 
     result = result.Where(x => x.etaDate == etaDate); // Filter result 
    } 

    return result.ToArray(); 

我想要像上面那样过滤linq结果,但它不起作用。Linq,filterling结果

有人知道,如何使它工作?

[编辑]

错误信息出现,

Server Error in '/' Application. 
Specified method is not supported. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NotSupportedException: Specified method is not supported. 

Source Error: 


Line 147:   result = result.Where(s => s.etaDate == null); 
Line 148: 
Line 149:   return result.ToArray(); 
Line 150:  } 
Line 151: } 


Source File: WebUI\Models\Reports.cs Line: 149 

Stack Trace: 


[NotSupportedException: Specified method is not supported.] 
    MySql.Data.Entity.SqlGenerator.Visit(DbApplyExpression expression) +54 
    System.Data.Common.CommandTrees.DbApplyExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +132 
    System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbFilterExpression expression) +131 
    System.Data.Common.CommandTrees.DbFilterExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +132 
    System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +132 
    System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +132 
    System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbSortExpression expression) +168 
    System.Data.Common.CommandTrees.DbSortExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +65 
    MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +53 
    MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +132 
    System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23 
    MySql.Data.Entity.SelectGenerator.GenerateSQL(DbCommandTree tree) +169 
    MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) +559 
    System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) +147 
    System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +521 

[EntityCommandCompilationException: An error occurred while preparing the command definition. See the inner exception for details.] 
    System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +1267 
    System.Data.EntityClient.EntityProviderServices.CreateCommandDefinition(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +97 
    System.Data.EntityClient.EntityProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) +198 
    System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) +147 
    System.Data.Objects.Internal.ObjectQueryExecutionPlan.Prepare(ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Span span, ReadOnlyCollection`1 compiledQueryParameters) +371 
    System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) +642 
    System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +149 
    System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +44 
    System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() +40 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() +40 
    System.Linq.Buffer`1..ctor(IEnumerable`1 source) +205 
    System.Linq.Enumerable.ToArray(IEnumerable`1 source) +78 
    BseWms.WebUI.Models.Reports.GetAllTransaction(TransactionSearchModel searchModel) in C:\Users\mark\Documents\Visual Studio 2010\Projects\BseWms\BseWms.WebUI\Models\Reports.cs:149 
    BseWms.WebUI.Controllers.ReportsController.GetAllTransaction(TransactionSearchModel searchModel) in C:\Users\mark\Documents\Visual Studio 2010\Projects\BseWms\BseWms.WebUI\Controllers\ReportsController.cs:187 
    lambda_method(Closure , ControllerBase , Object[]) +108 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +263 
    System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +19 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +191 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343 
    System.Web.Mvc.Controller.ExecuteCore() +116 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10 
    System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37 
    System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 
    System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 
    System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50 
    System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 
    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8836977 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 
+0

什么“不工作”。请明确点。 – 2012-07-09 04:29:22

+0

在你的'result = result.Where(...',我很清楚'x.etaDate'是什么,它不清楚右边的'etaDate'是什么,它来自哪里或者什么其值为: – Tod 2012-07-09 04:39:08

+0

什么是etaDate – Tilak 2012-07-09 04:40:55

回答

1

所以你确实意识到在你向我们展示的代码中,etaDate没有显示被创建或分配的权利?你在评论中提到过它(除非我只是错过了它),我认为这增加了混淆。就我个人而言,我发现为了不同的目的而提供一个变量名称,而不是让人困惑。在您的匿名类型中,您创建了一个名为etaDate的字段,并将其与我所假设的名为etaDate的方法的变量进行比较。也许将过滤器重命名为etaFilterDate会有所帮助。如果没有别的东西,它肯定会有助于解决这个问题。

尝试使用调试器并停止Where()子句并检查结果和etaDate的内容。我怀疑你会发现没有与etaDate完全匹配的x.etaDate。请记住,日期和时间必须匹配。根据你的评论,你的etaDate将有一个午夜时间,我相信。

0

我假设你要零个结果在第17行?这个比较看起来是正确的,我可以用etaDateetaDate匹配来选出所有结果。所以我猜你的问题是前面的查询没有找到与etaDate匹配的记录 - 你可以仔细检查一下是否是这种情况?

+0

谢谢你的回答,我试过了,result = result.Where(s = > s.etaDate> =新日期时间(2012,5,20)); 如果(结果= NULL){ 返回 result.ToArray();} ! 别的 { return new string [0]; }。但同样的错误信息发生。 – 2012-07-09 05:09:01