【发布时间】:2014-02-13 03:49:04
【问题描述】:
如果答案很明显,我深表歉意,但 Google 没有给出答案(可能是因为我可能没有使用理想的措辞)。我正在尝试为具有多个类的用户重载我创建的 LINQ 方法签名;每个签名都需要自己的逻辑。我有以下内容:
public static class myExtension // TODO: Rename.
{
public static IQueryable<TypeA> IsReadableBy<T>(this IQueryable<TypeA> query, User user)
where T : TypeA
{
if (user.foo("argument")) {
return query;
} else if (!user.bar("argument2")) {
return query.Where(q => q.Collection1.Count == 0 && q.Collection2.Count == 0);
} else {
return query.Where(q => q.Collection1.Any(x => x.User.Id == user.Id)
|| q.Collection2.Any(x => x.Group.HasUser(user)));
}
}
}
现在,当我尝试将以下内容添加到 MyExtension 类时,它会失败:
public static IQueryable<TypeB> IsReadableBy<T>(this IQueryable<TypeB> query, User user)
where T : TypeB
{
if (user.foo("argument") || user.bar("argument2"))
{
return query;
}
else
{
return query.Where(q => q.Collection1.Any(x => x.User.Id == user.Id)
|| q.Collection2.Any(x => x.Group.Users.Any(u => u.User.Id == user.Id)));
}
}
这会破坏一切,即使方法签名应该不同。我尝试将新方法添加到它自己的类中,但没有成功。如何重载这样的方法?
编辑:我得到的错误是这个 -
'System.Linq.IQueryable' 没有 包含“IsReadableBy”的定义并且没有扩展方法 'IsReadableBy' 接受类型的第一个参数 'System.Linq.IQueryable' 可能是 找到(您是否缺少 using 指令或程序集引用?)
方法的类型参数 'Extensions.ModelExtensions.IsReadableBy(System.Linq.IQueryable, Data.Entities.User)' 不能从 用法。尝试指定类型参数 明确的。
【问题讨论】:
-
你得到什么错误?
-
如果你已经知道类型,为什么还需要泛型方法呢?
public static IQueryable<TypeB> IsReadable(this IQueryable<TypeB> query, User user)会为你工作吗? -
我想没有人注意到这里有一个 TaskA 和一个 TypeA 类...(对于 TaskB 和 TypeB)
-
@thepirat000 这是一个错误,我已经在更正中进行了编辑。
-
@wdosanjos 这确实有效 - 我删除了泛型,它编译并且似乎有效。
标签: c# linq linq-to-sql overloading extension-methods