Использование Generics с наследованием LINQ - PullRequest
1 голос
/ 22 декабря 2010

Используя Visual Studio O / R Designer, я создал несколько классов, унаследованных от базового класса (с именем SCO).

Унаследованные типы имеют свойство дискриминатора TypeId, которое представляет собой строку, содержащую имя типа. Например, унаследованный класс Blog будет иметь свойство TypeId, равное Blog.

Я хочу иметь возможность создать метод, который возвращает строго типизированную коллекцию любого из определенных унаследованных типов. Моя попытка этого метода заключается в следующем:

public static IQueryable<T> GetSCOs<T>(SCODataContext dc) where T : SCO
{
    string targetType = typeof(T).Name;
    IQueryable<T> scos = from s in dc.SCOs
                         where s.TypeId == targetType
                         select s;
    return scos;
}

Когда я пытаюсь скомпилировать этот метод, я получаю следующую ошибку ...

_Cannot implicitly convert type 'System.Linq.IQueryable<SCOs.SCO>' to 'System.Linq.IQueryable<T>'. An explicit conversion exists (are you missing a cast?)_

Я (думаю), я понимаю, почему это происходит, но не смог найти решение. Любой совет, руководство будет высоко ценится.

1 Ответ

7 голосов
/ 22 декабря 2010

Попробуйте:

public static IQueryable<T> GetSCOs<T>(SCODataContext dc) where T : SCO
{
    return dc.SCOs.OfType<T>();
}

Работает для LINQ-Entities, не уверен, работает ли он для LINQ-SQL.Попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...