F # Powerpack и Entity Framework: как реорганизовать общую часть двух запросов - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть два запроса:

 member private x.CheckIfUserExistsUsingId(userId:int, context:StoryBoardContext) =
  <@ context.Users 
     |> Seq.exists (fun currentUser -> currentUser.Id = userId) @>

И

member private x.FindUserById(userId:int, context:StoryBoardContext) =
 <@ context.Users 
    |> Seq.filter(fun currentUser -> currentUser.Id = userId) 
    |> Seq.head @>

Я бы хотел реорганизовать это так, чтобы два

 fun currentUser -> currentUser.Id = userId

могли быть однимметод вроде:

member private x.IfUserIdMatches (userId:int) = 
  fun (currentUser:User) -> currentUser.Id = userId

И затем используйте его:

member private x.CheckIfUserExistsUsingId(userId:int, context:StoryBoardContext) =
  <@ context.Users 
     |> Seq.exists (x.IfUserIdMatches (userId)) @>

Но я продолжаю получать ошибку:

The following construct was used in query but is not recognised by the F#-to-LINQ query translator...

, которая заставляет меня думать, что моя подписьметод плохо построен.Будучи новичком в F #, я немного запутался, так как уверен, что это можно сделать в C # с помощью метода, возвращающего Func.Тем не менее, я понимаю, что с самого начала есть различия, поскольку F # использует другую библиотеку для построения запросов linq.

1 Ответ

2 голосов
/ 02 декабря 2011

Работает ли это, если вы измените свой метод для возврата Expr

member private x.IfUserIdMatches (userId:int) = 
  <@ fun (currentUser:User) -> currentUser.Id = userId @>

и используете сплайсинг?

...