Linq, избежать двойного обращения
От: snaphold  
Дата: 30.01.25 16:42
Оценка:
Есть большой список List<B>
Есть класс А и есть 2 свойства среди прочих 15

int? Qty
string DeliveryResult


эти 2 свойства высчитываются из
Dictionary DeliveryList((id, personId), int qty)


в зависимости от результата поиска в словаре по ключу может быть 3 значения для DeliveryResult.

как можно заменить такое
var res = list<B>.Select(a => new A
         { Qty = DeliveryList[],
           DeliveryResult = GetDeliveryResult (key, DeliveryList[]),
          ...другие свойства
         }


на одно обращение к DeliveryList типа

var res = list<B>.Select(a => new A 
         { 
             var d = GetDelivery(key)        
           Qty = d.qty,
           DeliveryResult = d.DeliveryResult ,
          ...другие свойства
         }


Зы. Принципиально не делать автовычисляемое поле для DeliveryResult. Всю логику не стал постить, поэтому хочу понять как одно обращение к справочнику сделать
Отредактировано 30.01.2025 18:46 snaphold . Предыдущая версия .
Re: Linq, избежать двойного обращения
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 31.01.25 09:06
Оценка: +2
Здравствуйте, snaphold, Вы писали:

S>Зы. Принципиально не делать автовычисляемое поле для DeliveryResult. Всю логику не стал постить, поэтому хочу понять как одно обращение к справочнику сделать

let?
Но видимо нужен более полный код
Re: Linq, избежать двойного обращения
От: pilgrim_ Россия  
Дата: 31.01.25 09:45
Оценка: +1
Здравствуйте, snaphold, Вы писали:

S>на одно обращение к DeliveryList типа


S>
S>var res = list<B>.Select(a => new A 
S>         { 
S>             var d = GetDelivery(key)        
S>           Qty = d.qty,
S>           DeliveryResult = d.DeliveryResult ,
S>          ...другие свойства
S>         }
S>



        var res = list.Select(key => 
        {
            var d = GetDelivery(key);
            return new A 
            { 
                Qty = d.Qty,
                DeliveryResult = d.DeliveryResult ,
            };                                  
        });
Re: Linq, избежать двойного обращения
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.02.25 16:10
Оценка:
Здравствуйте, snaphold, Вы писали:

S>
S>var res = list<B>.Select(a => new A 
S>         { 
S>             var d = GetDelivery(key)        
S>           Qty = d.qty,
S>           DeliveryResult = d.DeliveryResult ,
S>          ...другие свойства
S>         }
S>

var res = 
  from l in list<B>
  let d = GetDelivery(key)
  select new A 
  { 
    Qty = d.qty,
    DeliveryResult = d.DeliveryResult,
    ...
  };

S>Зы. Принципиально не делать автовычисляемое поле для DeliveryResult. Всю логику не стал постить, поэтому хочу понять как одно обращение к справочнику сделать
Ничего не понятно, но ответ выше.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Linq, избежать двойного обращения
От: Слава  
Дата: 02.02.25 17:44
Оценка: -2
Здравствуйте, snaphold, Вы писали:

S>Есть большой список List<B>

S>Есть класс А и есть 2 свойства среди прочих 15
S>Зы. Принципиально не делать автовычисляемое поле для DeliveryResult. Всю логику не стал постить, поэтому хочу понять как одно обращение к справочнику сделать

Любое промежуточное вычисление в LINQ делается через дополнительный select.
Re[2]: Linq, избежать двойного обращения
От: snaphold  
Дата: 03.02.25 06:35
Оценка:
Здравствуйте, pilgrim_, Вы писали:



_>
_>        var res = list.Select(key => 
_>        {
_>            var d = GetDelivery(key);
_>            return new A 
_>            { 
_>                Qty = d.Qty,
_>                DeliveryResult = d.DeliveryResult ,
_>            };                                  
_>        });
_>



Оно! Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.