我有一个数据库,其中所有表都有一个名为ID的主键。

我不想为我的所有表制作多个GetObjectForId,我想制作一个采用IQueryable和Type的通用方法,然后尽可能尝试从IQueryable选择中获取一个对象。

我在想这样的事情:

public IQueryable<Type> GetObjectForIdInCollection(IQueryable selection, Type t, int id)
{
    return selection.Cast<T>().Where(c => c.ID == id).FirstOrDefault()
}


显然,这段代码是完全错误的,但是您知道我正在尝试执行的操作。

这是一个好主意吗?我该如何实现这种方法?

最佳答案

您可以创建一个基本接口,您的所有实体都可以实现:

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

// ...

public T GetObjectForIdInCollection<T>(IQueryable<T> selection, int id)
    where T : IIdObject
{
    return selection.FirstOrDefault(c => c.Id == id);
}


但我认为这样做不值得。

关于c# - LINQ where未知类型的表达,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40300588/

10-09 08:18
查看更多