在 Generic IQuerable<T> 方法中转换泛型

问题描述 投票:0回答:0

我有一个与 Entity Framework 一起使用的通用 IQueryable 扩展方法:

public static IQueryable<T> Search<T>(this IQueryable<T> source, ...)

此方法的一些用途采用

T
其中
T: IFoo

IFoo
只有一个属性:

public interface IFoo
{
    string Foo { get; }
}

我想在上面的方法中添加一个 if 语句来检查 T 是否为 IFoo,如果是则使用 Foo 属性。

类似的东西:

if (typeof(IFoo).IsAssignableFrom(source.ElementType))
{
    source = source.Where(x => x.Foo == "Bar");
}

显然这是行不通的,因为虽然我正在检查 T 是 IFoo,但没有强制转换,所以我无法访问 Foo。

我知道我可以有两个单独的方法,并对一个方法使用通用约束,但我更愿意用一个方法来处理这两个方法。这可能吗?

c# generics iqueryable
© www.soinside.com 2019 - 2024. All rights reserved.