powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / инициализация в if
25 сообщений из 48, страница 1 из 2
инициализация в if
    #37560950
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
допустим вот, если взять пример из мсдна:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var i = 5;

// s is compiled as a string
var s = "Hello";

// a is compiled as int[]
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
    from c in customers
    where c.City == "London"
    select c;

// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>                             
var list = new List<int>();



а допустим, мне вот это:
var expr =
from c in customers
where c.City == "London"
select c;
нужно в иф засунутть., или в switch
получится что-то вроде
if(что-то там)
{
var expr =
from c in customers
where c.City == "London"
select c;
}
else
{
var expr =
from c in customers
where c.City == "Moscow"
select c;
}

Как мне сделать, чтобы "var expr" до ифа объявить?
...
Рейтинг: 0 / 0
инициализация в if
    #37561066
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак.
...
Рейтинг: 0 / 0
инициализация в if
    #37561074
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как тогда явно Ienumerable <T>?
Если например выражение возвращает интежер и стринг select new { type_int, type_string }
...
Рейтинг: 0 / 0
инициализация в if
    #37561083
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannА как тогда явно Ienumerable <T>?Да. Или IQueryable<T> если это LINQ-to-SQL.
Erik_KartmannЕсли например выражение возвращает интежер и стринг select new { type_int, type_string }От анонимных классов придётся отказаться.
...
Рейтинг: 0 / 0
инициализация в if
    #37561107
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОт анонимных классов придётся отказаться.
ну.. мне хотябы что-то вернуть надо, чтоб дальше хреначить.
...
Рейтинг: 0 / 0
инициализация в if
    #37561853
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНикак.
-1

Func<TSource, bool> predicate = d => ...
...
Рейтинг: 0 / 0
инициализация в if
    #37561861
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Func<TSource, bool> 


эта что?
...
Рейтинг: 0 / 0
инициализация в if
    #37561871
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делегат
...
Рейтинг: 0 / 0
инициализация в if
    #37561887
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно пример, как это применять? я не понял ничего.
...
Рейтинг: 0 / 0
инициализация в if
    #37561901
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://msdn.microsoft.com/ru-ru/library/bb549151%28v=VS.90%29.aspx
и как это спасёт отца русской демократии?
...
Рейтинг: 0 / 0
инициализация в if
    #37562239
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНикак.
-1

Func<TSource, bool> predicate = d => ...Нужен пример кода с анонимным классом, решающий проблему ТС.
...
Рейтинг: 0 / 0
инициализация в if
    #37562283
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannА как тогда явно Ienumerable <T>?
Если например выражение возвращает интежер и стринг select new { type_int, type_string }
Я сделал так:
IEnumerable<result> ret;
а result - это класс, который содержит только
type_int, type_string . Без класса вообще можно явно определить эти инт и стринг?
...
Рейтинг: 0 / 0
инициализация в if
    #37562284
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannБез класса вообще можно явно определить эти инт и стринг?Собственно, создавая класс Вы явно определяете тип результата запроса.
...
Рейтинг: 0 / 0
инициализация в if
    #37562287
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та я знаю. Просто не понятно, всегда в таких случаях создавать класс?
...
Рейтинг: 0 / 0
инициализация в if
    #37562288
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_KartmannТа я знаю. Просто не понятно, всегда в таких случаях создавать класс?Как минимум в случаях, когда нельзя использовать анонимный класс. Если есть возможность использовать анонимный класс - явно описывать класс наверное не надо.
...
Рейтинг: 0 / 0
инициализация в if
    #37562290
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не.. ну-помоему это немного извращение . нет?
А Вы поняли, что имел в виду МСУ ?
...
Рейтинг: 0 / 0
инициализация в if
    #37562300
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmannне.. ну-помоему это немного извращение . нет?Я бы назвал это недостатком. Это, пожалуй, единственный недостаток LINQ по сравнению с SQL (не считая корявого left join) - нет возможности обращения к анонимным классам за пределами области видимости места, где он "сгенерирован". Надеюсь, авторы C# одумаются и добавят в будущем такую возможность.
Erik_KartmannА Вы поняли, что имел в виду МСУ ?Мне кажется, он не понял задачу. Или мы его не поняли. :-) Не будем гадать, подождём от него примера. :-)
...
Рейтинг: 0 / 0
инициализация в if
    #37562308
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНужен пример кода с анонимным классом, решающий проблему ТС.
Erik_Kartmann
Код: plaintext
1.
from c in customers


Алексей, хоть убейте, не вижу тут анонимного класса.

Erik_KartmannА Вы поняли, что имел в виду МСУ ?
Код: plaintext
1.
2.
3.
var items = Enumerable.Range(1, 100).Select(d => new Customer { Name = "Terry" + d, Age = d });
Func<Customer, bool> predicate = d => new Random().Next(0, 2) == 1 ? d.Age > 20 : d.Age > 50;
var filtered = items.Where(predicate);



Алексей КМне кажется, он не понял задачу. Или мы его не поняли. :-) Не будем гадать, подождём от него примера. :-)
Второе :)
...
Рейтинг: 0 / 0
инициализация в if
    #37562322
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНужен пример кода с анонимным классом, решающий проблему ТС.
Во-вторых, никто нам не запрещает создать свой предикат для анонимного класса. Вот пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var items = Enumerable.Range(1, 100).Select(d => new { Name = "Terry" + d, Age = d });

var predicate = new Random().Next(0, 2) == 1 ? 
    new Predicate<int>(delegate(int age) { return age > 20; }) :
    new Predicate<int>(delegate(int age) { return age > 50; });

var filtered = items.Where(d => predicate(d.Age));



Леша, что скажете? :)
...
Рейтинг: 0 / 0
инициализация в if
    #37562330
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЛеша, что скажете? :)
Соответственно, в количестве предикатов нас никто не ограничивает :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var items = Enumerable.Range(1, 100).Select(d => new { Name = "Terry" + d, Age = d });

bool condition = new Random().Next(0, 2) == 1;

var predicateName = condition ?
    new Predicate<string>(name => { return name.StartsWith("Terry1") || name.StartsWith("Terry2"); }) :
    new Predicate<string>(name => { return name.StartsWith("Terry3") || name.StartsWith("Terry4"); });

var predicateAge = condition ?
    new Predicate<int>(age => { return age > 20; }) :
    new Predicate<int>(age => { return age > 50; });

var filtered = items.Where(d => predicateName(d.Name) && predicateAge(d.Age));
...
Рейтинг: 0 / 0
инициализация в if
    #37562365
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добивая лопатой наших друзей из Новосибирска, хочется вспомнить про динамические предикаты, веяние 4-го фреймворка :)

Код: plaintext
1.
2.
3.
4.
5.
var items = Enumerable.Range(1, 100).Select(d => new { Name = "Terry" + d, Age = d });
Func<dynamic, bool> predicate = d => 
    condition ? d.Name.StartsWith("Terry1") && d.Age > 20 : 
    d.Name.StartsWith("Terry2") && d.Age > 50;
var filtered = items.Where(predicate);



P.S. Лично я не сторонник такого подхода, так как теряется контроль имен и контроль типов. Но зато имеем один единственный предикат, а не сотню.
...
Рейтинг: 0 / 0
инициализация в if
    #37562395
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
var items = Enumerable.Range(1, 0).Select(d => new { пустое моё })


а без Ранге как можно ?
...
Рейтинг: 0 / 0
инициализация в if
    #37562410
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КНужен пример кода с анонимным классом, решающий проблему ТС.
Во-вторых, никто нам не запрещает создать свой предикат для анонимного класса. Вот пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
var items = Enumerable.Range(1, 100).Select(d => new { Name = "Terry" + d, Age = d });

var predicate = new Random().Next(0, 2) == 1 ? 
    new Predicate<int>(delegate(int age) { return age > 20; }) :
    new Predicate<int>(delegate(int age) { return age > 50; });

var filtered = items.Where(d => predicate(d.Age));



Леша, что скажете? :)Не удовлетворяет условиям поставленной задачи. ТС хочет использовать анонимный класс за пределами области его видимости. В Вашем примере это не так.

ЗЫ: Я понимаю, что можно изменить постановку задачи и привести всё к какому-то такому виду.
...
Рейтинг: 0 / 0
инициализация в if
    #37562412
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУP.S. Лично я не сторонник такого подхода, так как теряется контроль имен и контроль типов. Но зато имеем один единственный предикат, а не сотню.Оно того не стоит.
...
Рейтинг: 0 / 0
инициализация в if
    #37562420
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmann
Код: plaintext
1.
var items = Enumerable.Range(1, 0).Select(d => new { пустое моё })


а без Ранге как можно ?

Чё? )

Алексей КНе удовлетворяет условиям поставленной задачи. ТС хочет использовать анонимный класс за пределами области его видимости. В Вашем примере это не так.
Вы так и не прокомментировали это:
МСУАлексей, хоть убейте, не вижу тут анонимного класса.
ТС работает с типизированной сущностью.

Во-вторых, где было сказано про "пределами области его видимости"?

Еще раз чистаем начальный вопрос:

Сабжист
Код: plaintext
1.
2.
3.
4.
var expr =
from c in customers
where c.City == "London"
select c;


нужно в иф засунутть., или в switch получится что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if(что-то там)
{
var expr =
from c in customers
where c.City == "London"
select c;
}
else
{
var expr =
from c in customers
where c.City == "Moscow"
select c;
}


Как мне сделать, чтобы "var expr" до ифа объявить?
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / инициализация в if
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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