Tengo una consulta LINQ que tiene este aspecto:Sustitución de un método regular con un método anónimo en C#/LINQ
public IEnumerable<Foo> SelectFooBars()
{
return
from
f in foos
join
b in bars
on f.BarId equals b.Id
select
AddMissingProp(f, b.MissingProp);
}
public void AddMissingProp(Foo foo, string missingProp) // substitute this with inline lambda
{
foo.MissingProp = missingProp;
return foo;
}
me gustaría deshacerse de AddMissingProp
y utilizar alguna forma de lambda en mi select
cláusula en su lugar.
intenté ...
...
select
(f, b) => { f.MissingProp = b.MissingProp; return f }
... pero tengo el siguiente error:
A local variable named 'f' cannot be declared in this scope because it would give a different meaning to 'f', which is already used in a 'parent or current' scope to denote something else.
¿Cómo puedo "lambda-ize" mi consulta?
actualización
Esto también no funciona:
...
select
() => { f.MissingProp = b.MissingProp; return f }
me sale el siguiente error:
The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
que no cambió la cláusula join
en todo, así que estoy perplejo.
No conozco la sintaxis LINQ lo suficiente como para escribirla, pero ¿no sería mejor hacer la mutación en una declaración foreach (yourLinqQuery)? Tener una mute selectiva de los objetos parece confuso. –
try * on f.BarId es igual a b.Id * –
@Doc Brown, en realidad fue solo un error tipográfico en mi ejemplo (mi código real dice 'igual'). Corregido ahora. – devuxer