Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразование типов / 6 сообщений из 6, страница 1 из 1
09.11.2015, 10:52
    #39098070
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Есть класс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public abstract class CorporateActionProcessBase : ObjectData, IHasID{}

public interface IHasID: IHasParentID
{
        Guid Id { get; }
}

public class CorporateActionProcessStat : CorporateActionProcessBase {}

[KnownType(typeof(CorporateActionProcessStat))]
public class ObjectData 



Далее делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
                if (null != dbSet && typeof(ObjectData).IsAssignableFrom(Type.GetType(typeName, true))
                                  && typeof(IHasID).IsAssignableFrom(Type.GetType(typeName, true)))
                {
                    IQueryable<IHasID> data = dbSet as IQueryable<IHasID>;
                    var dataN = data.Where(w => w.Id == id);
                    var res = dataN as IEnumerable<ObjectData>;

                    return res;
                }



res получаю null.

А если сделать так, то все работает:
Код: c#
1.
2.
3.
4.
5.
6.
List<ObjectData> list = new List<ObjectData>();
                    var dataN = data.Where(w => w.Id == id);
                    foreach (var item in dataN.ToList())
                    {
                        list.Add((ObjectData)item);
                    }



Что поправить в примере выше, чтобы цикл не делать?
...
Рейтинг: 0 / 0
09.11.2015, 14:02
    #39098366
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Код: c#
1.
var dataN = data.Where(w => w.Id == id).AsEnumerable();


?
...
Рейтинг: 0 / 0
09.11.2015, 15:32
    #39098546
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Pavluha,

Судя по
автор
Код: c#
1.
var dataN = data.Where(w => w.Id == id);



dataN у тебя это явно IEnumerable<IdType>, где IdType это любой целочисленный или строковый тип, т.е. тип годящийся под айдишник.

Потом ты пытаешься интерпретировать IEnumerable<IdType> как IEnumerable<ObjectData>
автор
Код: c#
1.
var res = dataN as IEnumerable<ObjectData>;




И, естественно, у тебя в res попадает null.
...
Рейтинг: 0 / 0
09.11.2015, 15:34
    #39098547
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Можешь в студии навести на "var" в
автор
Код: c#
1.
var dataN = data.Where(w => w.Id == id);


чтобы посмотреть какого типа у тебя dataN.
...
Рейтинг: 0 / 0
09.11.2015, 16:50
    #39098647
Pavluha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
enigmatic,

Тип IQueryable<IHasID>.
Он такой и должен быть, ведь тут произошло преобразование: IQueryable<IHasID> data = dbSet as IQueryable<IHasID>;
...
Рейтинг: 0 / 0
09.11.2015, 19:07
    #39098819
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Pavluha,

Ой, я прочитал .Where как .Select.
Насчет цикла, попробуй использовать Enumerable.Cast вместо as IEnumerable<ObjectData>.
Можно еще почитать на тему ковариантность/контравариантность, вроде это как раз тот случай.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразование типов / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]