Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IEnumerable ReturnData(IEnumerable data) 
:(
    Опции темы
Gregoryy
Дата 8.3.2009, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.10.2007

Репутация: нет
Всего: 1



Есть метод
Код

public IEnumerable ReturnData(IEnumerable data)
{
}

Пытаюсь передать эму результат такого запроса
Код

var getNews = from news in News.Systems_News
                      where news.Publish_Date <= DateTime.Now.ToLocalTime()
                      orderby news.Publish_Date descending
                      select new
                      {
                          news.Id,
                          news.Title,
                          news.Home_Text,
                          news.Publish_Date,
                          news.Author,
                          news.Comment_Count,
                          news.View_Count,
                          summ = GetSumm(news.Vote_User_Count,
                              news.Vote_Count)
                      };

Чтобы в этом методе выполнить с data еще пару манипуляций типа 
Код

Skip(x * y).Take(x).ToList()

Значения х и у будет браться из свойств класса где реализован метод.
Вот только не могу понять правильно ли я реализовал метод. Если да, тогда как привести в тип чтобы можно было выполнить такие манипуляции? Результат выполнения метода хочу вернуть в ListView.DataSource
PM MAIL ICQ   Вверх
Любитель
Дата 10.3.2009, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



1. Твой запрос нескомпилится. А именно - ты создаёшь анонимный тип без именования пропертей (кроме суммы). Так нельзя smile
2. Большинство экстеншен-методов от Enumerable применимы только к дженерик-версии IEnumerable. Проблма в том, что для анонимного типа ты не сможешь объявить сигнатуру дженерик-версии IEnumerable.

Потому - создай свой тип, возвращай IEnumerable<MyType>. И разберись с инициализацией пропертей при вызове конструктора (с использованием синтаксиса C# 3.0).

Ещё такой момент - ты уверен, что тебе всегда нужна эта сумма? Может проще вернуть просто твой news (тогда тип для IEnumerable уже будет готов)? А, если понадобятся, посчитать суммы.


--------------------
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 10.3.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(Любитель @  10.3.2009,  02:16 Найти цитируемый пост)
А именно - ты создаёшь анонимный тип без именования пропертей (кроме суммы). Так нельзя 

Вообще-то так можно.
Gregoryy
передавай IEnumerable, только внутри делай data.Cast<object>().Skip(x * y).Take(x)... Возможны глюки с определенными провайдерами, но в общем должно работать.


--------------------
PM MAIL WWW   Вверх
Gregoryy
Дата 10.3.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.10.2007

Репутация: нет
Всего: 1



Любитель, запрос работает нормально. Данные выводятся. 
PashaPash, Не совсем понял что ты имеешь виду внутри? 
Дело в том что когда я передаю данные в метод, который принимает и возвращает IEnumerable, я не могу с ними нечего сделать. Если точно сказать data не имеет методы фильтрации. Я приводил в тип List<IEnumerable> вроде фильтрация активировалась. Но свойства отсутствуют или данные просто пустые. Я уже по разному пробовал. Но так и не понял как правильно сделать.
Например если сделать так:
Код

public IEnumerable ReturnData(IEnumerable data)
        {
            List<IEnumerable> l = (data as List<IEnumerable>);
            return l.Skip(0 * 10).Take(10).ToList();
        }

Цитата

То выводиться ошибка:
Сведения об исключении: System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: source

Если вот так:
Код

public IEnumerable ReturnData(IEnumerable data)
        {
            List<IEnumerable> l = new List<IEnumerable> { data};
            return l.Skip(0 * 10).Take(10).ToList();
        }

Цитата

Сведения об исключении: System.Web.HttpException: DataBinding: 'System.Data.Linq.DataQuery`1[[<>f__AnonymousType0`8[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], App_Web_ce9whdda, Version=0.0...' не содержит свойство с именем Title. 

PM MAIL ICQ   Вверх
Любитель
Дата 11.3.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(PashaPash @  10.3.2009,  19:38 Найти цитируемый пост)
Вообще-то так можно.

О, позор мне! Блин, не знал  smile 

Gregoryy, Skip, Take и прочие действительно (как правильно сказал PashaPash) можно заставить работать, вернув IEnumerable<object>. Для получения последнего используется экстеншен-метод Cast. Но пройти по пропертям всё равно не получится. Более того, после такой манипуляции (возвращения анонимного типа) с пропертями можно будет работать только через рефлекшен. Что вряд ли удобно smile


--------------------
PM MAIL ICQ Skype   Вверх
PashaPash
Дата 11.3.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Gregoryy, List<IEnumerable> - это жестоко. Попробуй что-то типа:
Код

public IEnumerable ReturnData(IEnumerable data)
        {
            return data.Cast<object>().Skip(0 * 10).Take(10);
        }

Цитата(Любитель @  11.3.2009,  00:01 Найти цитируемый пост)
Но пройти по пропертям всё равно не получится.

судя по всему, тут нужно что-то типа pager-а, ему не нужны проперти. а результат отдается ListView, тот тоже не требует строгой типизации.

Это сообщение отредактировал(а) PashaPash - 11.3.2009, 11:58


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.