Get from IQueryable to IEnumerable

元气小坏坏 提交于 2019-12-07 01:27:47

问题


this should be a quick one for all you f# rockers, but it's got me stuck at the moment.

I've got an F# type which I'm trying to get to implement a c# interface

public interface ICrudService<T> where T: DelEntity, new()
{
    IEnumerable<T> GetAll();
}

here's how it's implemnted in c#:

public IEnumerable<T> GetAll()
{
    return repo.GetAll();
}

repo.GetAll returns an IQueryable, but the c# compiler knows enough to convert to IEnumerable because IQueryable<T> : IEnumerable<T>. but In F# the compiler can't work it and I've tried a few attempt to cast it correctly

type CrudService<'T when 'T :(new : unit -> 'T) and 'T :> DelEntity>(repo : IRepo<'T>) = 
    interface ICrudService<'T> with
         member this.GetAll () = 
            repo.GetAll<'T>

this is giving me a type mismatch error


回答1:


You need to cast to IEnumerable<'T>:

type CrudService<'T when 'T :(new : unit -> 'T) and 'T :> DelEntity>(repo : IRepo<'T>) = 
        interface ICrudService<'T> with
             member this.GetAll () = 
                repo.GetAll() :> IEnumerable<'T>



回答2:


What if you used Seq.cast<'T? It sounds like it just needs to be casted to the correct Type. Since IEnumerables are implemented differently in F# than they are in C#.

let seqCast : seq<int> = Seq.cast repo.GetAll<'T>


来源:https://stackoverflow.com/questions/23973233/get-from-iqueryable-to-ienumerable

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!