4

我正在尝试为两个实体编写扩展方法。

首先找到对象的类型,然后对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; }
}
4

1 回答 1

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
}
于 2013-08-07T12:23:24.083 回答