LINQ запрос с JOIN-ами: как переписать на методы?
От: DreamWeaver ОАЭ  
Дата: 01.03.12 12:30
Оценка:
Сам запрос вот:
from mc in context.obj1_Set
                    join obj2 in context.obj2_Set on mc.obj2_id equals obj2.id into obj2Result
                    join obj3 in context.obj3_Set on mc.obj3_id equals obj3.id into obj3Result
                    join obj4 in context.obj4_Set on mc.obj4_id equals obj4.id into obj4Result
                    select new Obj1Wrapper
                    {
                        Obj1 = mc,
                        Obj2_Str = obj2Result.Where(v => v.type_id == 2).Select(v => v.Value).FirstOrDefault(),
                        Obj3_Str = obj3Result.Where(v => v.type_id == 3).Select(v => v.Value).FirstOrDefault(),
                        Obj4_Str = obj4Result.Where(v => v.type_id == 4).Select(v => v.Value).FirstOrDefault()
                    };


Его нужно переписать , чтобы можно было избавиться от "Obj1Wrapper". Свойства "Obj2_Str","Obj3_Str", "Obj4_Str" можно засунуть в partial class для "Obj1". Тогда эти совйства можно будет присваивать так:

... .Select(v=>{ v.Obj2_Str = ...;v.Obj3_Str = ...;v.Obj4_Str = ...; return x; })


Или, можно ли изменить приведенный выше запрос так, чтобы выбирать "Obj1" вместо "Obj1Wrapper", но при этом устанавливать все дополнительные свойства, определенные в partial классе?
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
Re: LINQ запрос с JOIN-ами: как переписать на методы?
От: Algorithmus Украина  
Дата: 01.03.12 13:12
Оценка:
DW>Или, можно ли изменить приведенный выше запрос так, чтобы выбирать "Obj1" вместо "Obj1Wrapper", но при этом устанавливать все дополнительные свойства, определенные в partial классе?

Декларативный синтаксис такого по умолчанию не позволяет, но можно написать extension method, чтобы потом можно было делать так:

from i in collection
select i.Update(x => x.Name = "A").Update(x => x.Id = "B")


Экстеншен метод получится примерно такой:

public static T Update<T>(this T obj, Action<T> act)
{
    act(obj);
    return obj;
}
Re: LINQ запрос с JOIN-ами: как переписать на методы?
От: Sharov Россия  
Дата: 01.03.12 13:17
Оценка:
Здравствуйте, DreamWeaver, Вы писали:


select new Obj1(){
Obj2_Str = obj2Result.Where(v => v.type_id == 2).Select(v => v.Value).FirstOrDefault(),
Obj3_Str = obj3Result.Where(v => v.type_id == 3).Select(v => v.Value).FirstOrDefault(),
Obj4_Str = obj4Result.Where(v => v.type_id == 4).Select(v => v.Value).FirstOrDefault()
}

не то?
Кодом людям нужно помогать!
Re[2]: LINQ запрос с JOIN-ами: как переписать на методы?
От: DreamWeaver ОАЭ  
Дата: 01.03.12 13:55
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте, DreamWeaver, Вы писали:



S>select new Obj1(){

S> Obj2_Str = obj2Result.Where(v => v.type_id == 2).Select(v => v.Value).FirstOrDefault(),
S> Obj3_Str = obj3Result.Where(v => v.type_id == 3).Select(v => v.Value).FirstOrDefault(),
S> Obj4_Str = obj4Result.Where(v => v.type_id == 4).Select(v => v.Value).FirstOrDefault()
S> }

S>не то?


не совсем. Obj1 — это Entity и в нем много своих свойств, заполненных Navigation-свойств и коллекций. Не хочется их все копировать.
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
Re[2]: LINQ запрос с JOIN-ами: как переписать на методы?
От: DreamWeaver ОАЭ  
Дата: 01.03.12 14:11
Оценка:
Здравствуйте, Algorithmus, Вы писали:

DW>>Или, можно ли изменить приведенный выше запрос так, чтобы выбирать "Obj1" вместо "Obj1Wrapper", но при этом устанавливать все дополнительные свойства, определенные в partial классе?


A>Декларативный синтаксис такого по умолчанию не позволяет, но можно написать extension method, чтобы потом можно было делать так:


A>
A>from i in collection
A>select i.Update(x => x.Name = "A").Update(x => x.Id = "B")
A>


делаю так:

...
select mc.Update(
   v=>
   { 
     v.Obj2_Str = obj2Result.Where(v => v.type_id == 2).Select(v => v.Value).FirstOrDefault();
   });


и выдает ошибку:
error CS0834: A lambda expression with a statement body cannot be converted to an expression tree
В сложившихся условиях ни то, ни другое не сулило ему никакой выгоды. Чего не скажешь о молчании...
Re[3]: LINQ запрос с JOIN-ами: как переписать на методы?
От: Sharov Россия  
Дата: 01.03.12 14:23
Оценка:
Здравствуйте, DreamWeaver, Вы писали:

DW>не совсем. Obj1 — это Entity и в нем много своих свойств, заполненных Navigation-свойств и коллекций. Не хочется их все копировать.


А возможно создать конструктор(фабрику), принимающий экземпляр того же типа и копирующий
всю необходимую инфу?
Если да, тогда все просто.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.