从IQueryable <t>获取最后一个元素的扩展方法

时间:2019-05-10 12:17:54

标签: c# entity-framework linq

这些是我的数据库模型:

public interface IIDentity
{
    int Id {get; set;}
}

public class BaseModel : IIDentity
{
    [Key]
    public int Id { get; set; }
}

[Table("user")]
public class User : BaseModel
{
    public string name {get; set;}
}

我要做的是从表中获取最后一个用户。 这不起作用。

context.user.LastOrDefault();

由于某些原因,linq to entities不提供LastOrDefault()(但是FirstOrDefault()在工作)

我可以通过以下方式使其正常工作

context.user.OrderByDescending(x => x.Id).FirstOrDefault();

然后,我想使其更通用:

public static class IQueryableExtensions
{
    public static T TakeLast<T>(this IQueryable<T> input) where T : IIDentity
    {
        return input
            .OrderByDescending(x => x.Id)
            .FirstOrDefault();
    }
}

但是我遇到了错误:

'Unable to cast the type 'User' to type 'IIDentity'. LINQ to Entities only supports casting EDM primitive or enumeration types.'

我能做些什么吗?

1 个答案:

答案 0 :(得分:1)

我能够通过将/login?error泛型类型约束添加到扩展方法来解决此问题。

  

其中T:类,IIDentity

authenticationFailureUrl