2014-07-20 1 views
3

F #의 IQueryable 개체에 대한 쿼리 스타일 대신 람다 스타일 쿼리를 사용할 수 있습니까? 같은 뭔가 :이 프로필F #의 IQueryable 람다 스타일

type schema = SqlDataConnection<"Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=true;"> 
let db = schema.GetDataContext() 
let q = db.MyTable |> Seq.filter (fun r -> r.id < 100) |> Seq.take 10 
let result = q |> List.ofSeq 

select * from MyTable 그래서 난 필터를 가정하고 IEnumerables하지 IQueryables에서 실행되는 걸릴거야?

또는이를 ambda없이 query {}을 사용하도록 수정하는 유일한 방법은 무엇입니까?

type SqlDataConnection<...>(...) = 
    interface seq<'T> with 
     member __.GetEnumerator() = executeSQL() 

당신이 대신 된 IQueryable로 작동 할 경우

+3

의하지 않습니다 IEnumerable을, F 번호의 쿼리 구문이있다 'db.MyTable.Where (fun r -> r.id <100) .take (10)'와 같은 yntax는 C#과 유사합니까? –

+1

아 맞습니다! 그것은 나에게 결코 일어난 적이 없다. .. 단지 관심 밖의, 이것은 '적당한'F # 배관으로 할 수 없다? 나는 당신이'Seq.filter'를 호출 할 때 실제로'.AsEnumerable()'을 호출하고 있다고 생각합니다. – user826840

+0

필자는 F # 구문에 문제가 있다고 생각하지 않지만'IQueryable'보다는'IEnumerable'을 사용하는'Seq'에 대해 더 많이 생각합니다. IEnumerable로 변환하면 쿼리가 강제로 실행됩니다. 아마 당신은 이것에 대한 해결책을 찾을 수 있습니다 : http://stackoverflow.com/a/13828080/54937 –

답변