powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразование типов
6 сообщений из 6, страница 1 из 1
Преобразование типов
    #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
Преобразование типов
    #39098366
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
var dataN = data.Where(w => w.Id == id).AsEnumerable();


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


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

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

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


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