我很抱歉,如果答案很明顯,但Google沒有找到答案(可能是因爲我可能沒有使用理想的措辭)。我試圖重載我創建的LINQ方法簽名,用於多個類的用戶;每個簽名都需要自己的邏輯。我有以下幾點:Linq to SQL擴展方法:方法重載,錯誤
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」的可能是 實測值(是否缺少使用指令或程序集引用?)
的類型參數方法 「Extensions.ModelExtensions.IsReadableBy(System.Linq.IQueryable, Da ta.Entities.User)'不能從 的用法中推斷出來。嘗試明確指定類型參數 。
你會得到什麼錯誤? – thepirat000
如果你已經知道類型,爲什麼你需要有通用的方法? '公共靜態IQueryable IsReadable(這個IQueryable 查詢,用戶用戶)'爲你工作? –
wdosanjos
我認爲沒有人注意到這裏有一個* TaskA * **和** a * TypeA *類...(與* TaskB *和* TypeB *相同) – thepirat000