Using Linq and C#, on having the min of a list AND another value at the same time
Having the following C# linq query:
var result =
from member in members
let BestPriceLength =
(from lumber in lumbers
where member.Thickness == lumber.Thickness && member.Width == lumber.Width && member.Length <= lumber.Length
select lumber).Min(l => l.Price / l.Length)
let BestLengthFromBestPrice = ??????
select new
{
Member = member,
MemberLength = member.Length,
BestLengthFromBestPrice ,
Ratio = member.Length / BestLengthFromBestPrice,
};
开发者_如何学JAVA
I don't know how to get the lumber's length chosen by for the BestPriceLength variable into the other parts of the result.
Anyone with a clever idea?
Here's what I've done, after some hints from pst left in the comments (too bad he did not leave an answer I could accept!):
var result =
from member in members
let bestLumber =
(from lumber in lumbers
where member.Thickness == lumber.Thickness && member.Width == lumber.Width && member.Length <= lumber.Length
orderby lumber.Price / (decimal)lumber.Length
select lumber).First()
select new
{
Member = member,
MemberLength = member.Length,
BestLumber = bestLumber,
Ratio = member.Length / bestLumber.Length,
};
If I understood your question correctly, you could do something like this:
from member in members
let theLumber=
(from lumber in lumbers
where member.Thickness == lumber.Thickness && member.Width == lumber.Width &&
member.Length <= lumber.Length
select lumber)
let BestPriceLength = theLumber.Min(l => l.Price / l.Length)
let BestLengthFromBestPrice = theLumber.Length
//etc...
精彩评论