Asp.net Linq,EF4,Linq查询后过滤数据

Asp.net Linq,EF4,Linq查询后过滤数据,asp.net,asp.net-mvc-3,linq,entity-framework,Asp.net,Asp.net Mvc 3,Linq,Entity Framework,我想过滤Linq查询后的结果 并将其设置为List()或Array() 这是我的密码 //for test, filter is always true bool filter = true; OrdersRepository ordersRepository = new OrdersRepository(); var productInQuery = ordersRepository.ProductIn; var productOutQuery = ordersRepository.Pro

我想过滤Linq查询后的结果

并将其设置为List()或Array()

这是我的密码

//for test, filter is always true
bool filter = true;

OrdersRepository ordersRepository = new OrdersRepository();

var productInQuery = ordersRepository.ProductIn;
var productOutQuery = ordersRepository.ProductOut;
var productQuery = ordersRepository.Product;
var orderInfoQuery = ordersRepository.OrderInfo;

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 reportModel
      {
          yourRef = o.yourRefNo,
          modelNo = x.modelNo,
          mfgNo = p.mfgNo,
          serialNo = p.serialNo,
          poNo = p.poNo,
          lbs =  p.lbs,
          width = p.width,
          height = p.height,
          depth = p.depth,
          qty = p.qty,
          dateIn = o.processDate,
          dateOut = (from m in orderInfoQuery where m.refNo == t.refNo select m.processDate).FirstOrDefault(),
          etaDate = (from w in orderInfoQuery where w.refNo == t.refNo select w.eta).FirstOrDefault()
      });

// Filter one more time
if (filter)
{
    List<reportModel> a = (from q in result
         where q.etaDate >= new DateTime(2012, 5, 20)
         select q).ToList();

    //var a = result.Where(q => q.etaDate >= new DateTime(2012, 5, 20)).ToList(); //I tried this too, but it does not work either.
}
else
{
    var a = result.ToList();
}
//对于测试,筛选器始终为true
布尔滤波器=真;
OrdersRepository ordersepository=新订单repository();
var productInQuery=ordersepository.ProductIn;
var productOutQuery=ordersepository.ProductOut;
var productQuery=ordersepository.Product;
var orderInfoQuery=ordersepository.OrderInfo;
var result=(来自productInQuery中的p)
在p.refNo上的orderInfoQuery中加入o等于o.refNo
在p.productNo等于x.no的productQuery中加入x
将p.no上的productOutQuery中的t等于t.productInNo连接到productIn中
来自productIn.DefaultIfEmpty()中的t
orderby o.processDate降序
选择新报告模型
{
yourRef=o.yourRefNo,
modelNo=x.modelNo,
mfgNo=p.mfgNo,
serialNo=p.serialNo,
poNo=p.poNo,
磅=磅,
宽度=p.width,
高度=p.高度,
深度=p.深度,
数量=p.qty,
dateIn=o.processDate,
dateOut=(从orderInfoQuery中的m开始,其中m.refNo==t.refNo选择m.processDate)。FirstOrDefault(),
etaDate=(从orderInfoQuery中的w开始,其中w.refNo==t.refNo选择w.eta)
});
//再过滤一次
如果(过滤器)
{
列表a=(从结果中的q开始)
其中q.etaDate>=新日期时间(2012,5,20)
选择q.ToList();
//var a=result.Where(q=>q.etaDate>=new-DateTime(2012,5,20)).ToList();//我也试过,但也不起作用。
}
其他的
{
var a=result.ToList();
}
运行上述代码时,会出现错误消息。

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 64:                  */
Line 65: 
Line 66:                 var a = result.Where(q => q.etaDate >= new DateTime(2012, 5, 20)).ToList();
Line 67:             }
Line 68:             else

Source File: WebUI\Controllers\TestController.cs    Line: 66 

Stack Trace: 


[NotSupportedException: Specified method is not supported.]
   MySql.Data.Entity.SqlGenerator.Visit(DbApplyExpression expression) +28
   System.Data.Common.CommandTrees.DbApplyExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +38
   System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbFilterExpression expression) +37
   System.Data.Common.CommandTrees.DbFilterExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +38
   System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +38
   System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbSortExpression expression) +63
   System.Data.Common.CommandTrees.DbSortExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SqlGenerator.VisitInputExpression(DbExpression e, String name, TypeUsage type) +35
   MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DbExpression e, String name, TypeUsage type) +21
   MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression expression) +38
   System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1 visitor) +23
   MySql.Data.Entity.SelectGenerator.GenerateSQL(DbCommandTree tree) +60
   MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) +334
   System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) +147
   System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +526

[EntityCommandCompilationException: An error occurred while preparing the command definition. See the inner exception for details.]
   System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory, DbCommandTree commandTree) +1329
   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) +397
   System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption) +696
   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.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +315
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   BseWms.WebUI.Controllers.TestController.dateTest() in C:\Users\mark\Documents\Visual Studio 2010\Projects\BseWms\BseWms.WebUI\Controllers\TestController.cs:66
   lambda_method(Closure , ControllerBase , Object[] ) +62
   System.Web.Mvc.<>c__DisplayClass1.<WrapVoidAction>b__0(ControllerBase controller, Object[] parameters) +17
   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() +8970349
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
不支持指定的方法。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。 异常详细信息:System.NotSupportedException:不支持指定的方法。 源错误: 第64行:*/ 第65行: 第66行:var a=result.Where(q=>q.etaDate>=newdatetime(2012,5,20)).ToList(); 第67行:} 第68行:其他 源文件:WebUI\Controllers\TestController.cs行:66 堆栈跟踪: [NotSupportedException:不支持指定的方法。] MySql.Data.Entity.SqlGenerator.Visit(DbApplyExpression)+28 System.Data.Common.CommandTrees.DbApplyExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression)+38 System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbFilterExpression表达式)+37 System.Data.Common.CommandTrees.DbFilterExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression)+38 System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression)+38 System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbSortExpression表达式)+63 System.Data.Common.CommandTrees.DbSortExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SqlGenerator.VisitInputExpression(dbe表达式,字符串名称,TypeUsage类型)+35 MySql.Data.Entity.SelectGenerator.VisitInputExpressionEnsureSelect(DBE表达式,字符串名称,类型用法类型)+21 MySql.Data.Entity.SelectGenerator.Visit(DbProjectExpression)+38 System.Data.Common.CommandTrees.DbProjectExpression.Accept(DbExpressionVisitor`1访问者)+23 MySql.Data.Entity.SelectGenerator.GenerateSQL(DbCommandTree树)+60 MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest,DbCommandTree commandTree)+334 System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)+147 System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory存储ProviderFactory,DbCommandTree commandTree)+526 [EntityCommandCompilationException:准备命令定义时出错。有关详细信息,请参阅内部异常。] System.Data.EntityClient.EntityCommandDefinition..ctor(DbProviderFactory storeProviderFactory,DbCommandTree commandTree)+1329 System.Data.EntityClient.EntityProviderServices.CreateCommandDefinition(DbProviderFactory storeProviderFactory,DbCommandTree commandTree)+97 System.Data.EntityClient.EntityProviderServices.CreatedDBCommandDefinition(DbProviderManifest providerManifest,DbCommandTree commandTree)+198 系统数据公司
public class reportModel
{
    public string yourRef {get; set;}
    public string modelNo {get; set;}
    public string mfgNo {get; set;}
    public string serialNo {get; set;}
    public string poNo {get; set;}
    public Nullable<float> lbs { get; set; }
    public Nullable<float> width { get; set; }
    public Nullable<float> height { get; set; }
    public Nullable<float> depth { get; set; }
    public int qty {get; set;}
    public Nullable<DateTime> dateIn { get; set; }
    public Nullable<DateTime> dateOut { get; set; }
    public Nullable<DateTime> etaDate { get; set; }
}
var thedate = new DateTime(2012, 5, 20);
List<reportModel> a = (from q in result
                       where q.etaDate >= thedate
                       select q).ToList();
List<reportModel> a = (from q in result 
    where q.etaDate >= new DateTime(2012, 5, 20) select q).ToList();
var date = new DateTime(2012, 5, 20);
List<reportModel> a = (from q in result 
    where q.etaDate >= date select q).ToList();
if(filter)
{
    var dateFilter = new DateTime(2012, 5, 20);
    result = result.Where(x => x.etaDate >= dateFilter);
}

return result.ToList(); //or .ToArray()