Tôi có một truy vấn LINQ trông như thế này:Thay thế một phương pháp thông thường với một phương pháp vô danh trong 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;
}
Tôi muốn thoát khỏi AddMissingProp
và sử dụng một số hình thức của một lambda trong select
của tôi thay vào đó.
Tôi đã cố gắng ...
...
select
(f, b) => { f.MissingProp = b.MissingProp; return f }
... nhưng tôi đã nhận được lỗi sau:
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.
Làm thế nào tôi có thể "lambda-ize" truy vấn của tôi?
Cập nhật
này cũng không hoạt động:
...
select
() => { f.MissingProp = b.MissingProp; return f }
tôi nhận được lỗi sau:
The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
tôi không thay đổi mệnh đề join
tại tất cả, vì vậy tôi bối rối.
Tôi không biết cú pháp LINQ đủ tốt để viết nó ra, nhưng nó sẽ không được tốt hơn làm các đột biến trong một tuyên bố foreach (yourLinqQuery)? Có một mutate chọn các đối tượng có vẻ khó hiểu. –
thử * trên f.BarId bằng b.Id * –
@Doc Brown, đó thực sự chỉ là lỗi đánh máy trong ví dụ của tôi (mã thực sự của tôi cho biết 'bằng’). Đã sửa lỗi. – devuxer