从IQueryable到IEnumerable

Jon*_*all 7 f# casting

对于你所有的摇滚乐手来说这应该是一个快速的,但它让我陷入困境.

我有一个F#类型,我正试图实现ac#接口

public interface ICrudService<T> where T: DelEntity, new()
{
    IEnumerable<T> GetAll();
}
Run Code Online (Sandbox Code Playgroud)

这是它在c#中的实现方式:

public IEnumerable<T> GetAll()
{
    return repo.GetAll();
}
Run Code Online (Sandbox Code Playgroud)

repo.GetAll返回一个IQueryable,但c#编译器知道足以转换为IEnumerable因为IQueryable<T> : IEnumerable<T>.但是在F#中编译器无法正常工作,我尝试了一些尝试正确地进行转换

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

这给了我一个类型不匹配的错误

Lee*_*Lee 7

你需要施放到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>
Run Code Online (Sandbox Code Playgroud)