Mjello在那里!我现在正在尝试创建一个F#应用程序,现在我又碰到了另一面墙。带谓词的查询函数
该问题存在于Microsoft.FSharp.Linq.Query
模块中,query
函数不会接受我的谓词,如果它们作为参数传递。检查了这一点:
member x.GetUsersWhere (e:User -> bool) =
query <@ ctx.Users |> Seq.filter e @>
,然后我把它像:
let service = new UserService()
service.GetUsersWhere (fun z -> z.Name = "James")
这应该是罚款吧?那么,编译器dosent同意:
下面的结构是在 查询使用,但不被 F#-to-LINQ查询翻译器识别:呼叫 (无, System.Collections.Generic.IEnumerable
1[WebFSharp.Entities.User] op_PipeRight[DbSet
1,IEnumerable的1](System.Data.Entity.DbSet
1 [WebFSharp.Entities.User], Microsoft.FSharp.Core.FSharpFunc2[System.Data.Entity.DbSet
1 [WebFSharp.Entities.User],System.Collections.Generic.IEnumerable1[WebFSharp.Entities.User]]), [PropertyGet (Some (FieldGet (Some (Value (WebFSharp.Business.UserService)), WebFSharp.Business.MyContext ctx)), System.Data.Entity.DbSet
1 [WebFSharp.Entities.User] 用户,设(谓词,值(), Lambda(source, 调用(无, System.Collections.Generic.IEnumerable1[WebFSharp.Entities.User] Filter[User](Microsoft.FSharp.Core.FSharpFunc
2 [WebFSharp.Entities.User,System.Boolean], System.Collections.Generic.IEnumerable1[WebFSharp.Entities.User]), [predicate, Coerce (source, System.Collections.Generic.IEnumerable
1 [[WebFSharp.Entities.User, WebFSharp.Entities,版本= 0.0.0.0, 文化=中立, PublicKeyToken =空]])])))])这是 不是有效的查询表达式。检查 允许的查询规范 ,并考虑将一些查询 出报价
的怎么回事?是否因为Expr
将在参数注入之前进行评估?
不管怎样,下面的代码的作品,但没有那么灵活:
member x.GetUsersByName name =
query <@ ctx.Users |> Seq.filter(fun z -> z.Name = name) @>
let service = new UserService()
service.GetUsersByName "James"
任何人都可以请棚刚刚发生一些轻?