5

익명 유형이 작동하는 쿼리를 얻으려고합니다.

let temporaryBookModel =
  query <@ context.Books 
    |> Seq.filter (fun book -> book.Id = bookId)
    |> Seq.map(fun item -> (item.Id, item.ParentUser.Id, item.ParentUser.Alias, item.Tagline, item.Title, item.Visible, item.CreatedDate))
    |> Seq.head @>

그리고 나는 계속지고있다 :

{ "매개 변수없는 생성자와 초기화기만이   LINQ to Entities. "}

어떤 값을 타입에 직접 매핑해도 익명 형은 객체 이니셜 라이저 기능을 기반으로하기 때문에이 예외를 throw해서는 안된다. 불행히도 익명 유형에서 발견 한 내용은 이것이 올바른 구문이라고 말하는 것 같습니다. 이것 또는 이와 비슷한 :

let temporaryBookModel =
  query <@ context.Books 
    |> Seq.filter (fun book -> book.Id = bookId)
    |> Seq.map(fun item -> (("a", item.Id), ("b", item.ParentUser.Id), ("c", item.ParentUser.Alias), ("d", item.Tagline), ("e", item.Title, item.Visible), ("f", item.CreatedDate)))
    |> Seq.head @>


  • F #에는 익명 유형에 대한 개념이 없습니다. ' - C #기능입니다. 여기에서는 일반 튜플을 구성합니다. - ildjarn
  • Seq.map (fun i - > i.Id, i.Id))를 사용하여 Seq.map (fun i - > i.Id)를 먼저 시도해보십시오. 기타.? - fmr

1 답변


3

F #은 익명 형식을 지원합니까?

내가 아는 한 - 그렇지 않습니다. 그러나 해결 방법에는 두 가지 방법이 있습니다.

  • 튜플 사용 (사용중인 경우)
  • 레코드 유형을 사용하지만이 경우 이전에 레코드를 정의해야합니다. 이 같은:
type Book =
    { 
        Id: int;
        ParentId: int;
        ParentAlias: string;
        TagLine: string;
        Title: string;
        Visible: bool;
        CreatedDate: DateTime;
    }

사용 코드 줄은 다음과 같습니다.

...
|> Seq.map 
    (fun item -> 
        {
            Id = item.Id; 
            ParentId = item.ParentUser.Id;
            ParentAlias = item.ParentUser.Alias;
            TagLine = item.Tagline;
            Title = item.Title;
            Visible = item.Visible;
            CreatedDate = item.CreatedDate
        }) 

유사한 질문에서 더 많은 설명을 찾을 수 있습니다.이리

최신 정보:

나를위한 레코드 유형 사용법은 더 우아한 해결책입니다,그러나Entity Framework에서 작동하지 않는 것처럼 보입니다.F #-> 매개 변수가없는 생성자로 기록 하시겠습니까?.

따라서 Tomas Petricek의 답변에 따르면 생성자와 필요한 속성이 적은 매개 변수를 사용하여 명시 적 형식으로 선언해야합니다.

연결된 질문


관련된 질문

최근 질문