我正在尝试为两个实体编写扩展方法。
首先找到对象的类型,然后用另一个表做inner join
。
如果它是A类型,那么Join
必须与B一起。如果它是B类,那么加入A.
但我陷入了Join
的境地。
public static C GetAllInfo<T>(this IQueryable<T> objCust)
{
if (typeof(T) == typeof(B))
{
//prepare the Object based on the Type
var objCastReg = objCust as IQueryable<B>;
//how to write join here ?????
var objUsermaster=objCastReg.GroupJoin(A,um=>um.UserId,r=>r.)
//Build the Class object from two retrieved objects.
}
if (typeof(T) == typeof(A))
{
var objCast = objCust as IQueryable<A>;
}
return null;
}
public class C
{
public A A{ get; set; }
public B B{ get; set; }
}
答案 0 :(得分:6)
听起来你根本不应该使用泛型。泛型用于当您的泛型方法不需要知道类型时。泛型类型参数表示此方法可以与任何具体类型一起使用。
也许你应该在这两种情况下只有两种特殊的方法。这使得所有的铸造和复杂性都消失了。
但是如果你坚持使用泛型方法,那么就是这样做的。首先创建我所说的特殊情况方法。
public static C GetAllInfo(this IQueryable<A> objCust); //implement this
public static C GetAllInfo(this IQueryable<B> objCust); //implement this
然后委托他们:
public static C GetAllInfo<T>(this IQueryable<T> objCust)
{
if (typeof(T) == typeof(B))
{
return GetAllInfo((IQueryable<B>)objCust); //call to specialized impl.
}
if (typeof(T) == typeof(A))
{
return GetAllInfo((IQueryable<A>)objCust); //call to specialized impl.
}
//fail
}