表达式中的引用泛型属性

Ale*_*lex 1 c# generics asp.net-mvc lambda

假设我有两张桌子,午餐和晚餐.我知道它们都包含DateTime属性"Time".

如果我有一个通用方法GetTime,那么当T是Lunch时我怎么能返回db.Lunch.Time?当T是Dinner时我怎么能返回db.Dinner.Time?我试图实现这一点,而不是单独使用typeof测试T,而是相当普遍.

伪代码:

public T GetTime<T>(DateTime dt)
{
    return MyDataContext.GetTable<T>().Where(entity => entity.Time == dt);
}
Run Code Online (Sandbox Code Playgroud)

因此,当我调用GetTime <Dinner>时,它将自动在晚餐表中查找所有晚餐实体,其属性时间等于我提供的参数dt.

问题是我无法在我的表达式中指定entity.Time,因为T是泛型的.我的问题是如何解决这个问题,以便我可以查找任何T(知道我的所有实体都具有 Time属性),而无需为Dinner和Lunch创建特定的方法.

BFr*_*ree 5

你必须让这两个类实现这样的接口:

public interface IMyInterface
{
   DateTime Time{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后在你的通用方法中:

public void MyMethod<T>(T item) where T: IMyInterface
{
    //here you can access item.Time
}
Run Code Online (Sandbox Code Playgroud)