Can you convert this Linq statement into Lambda without using join statements?

I see this all over the web, however I'm curious if there isn't an easier way to write this in lambda?

  var x = from c in db.Client
    from p in db.Prospects
    from ct in db.Countys
    select new ViewModelExcelReport 
    {
         client = c.ClientName,
         cntyCounty = ct.County,
         sctSection = p.Section
    };

I would like to see a lambda expression that does NOT use joins, as though i am almost certain that i have seen one without the joins, but if this isn't possible ofcouse i'd like to see one with, thanks.

Jon Skeet
people
quotationmark

Basically multiple from clauses contribute SelectMany calls. So your code is something like:

var x = db.Client
          .SelectMany(c => db.Prospects, (c, p) => new { c, p })
          .SelectMany(z => db.Countys, (z, ct) => new { z, ct })
          .Select(zz => new ViewModelExcelReport 
                        {
                            client = zz.z.c.ClientName,
                            cntyCounty = zz.ct.County,
                            sctSection = zz.z.p.Section
                        });

Note how this is rather more longwinded than the query expression - the compiler takes care of keeping track of all the range variables via transparent identifiers. Why do you want this in lambda form? What do you see as being the benefit? The query expression will be translated into exactly the same code, so you should use whichever one is clearer - which in this case looks like the query expression, IMO.

As an aside, I'd strongly recommend that you change your property names (in ViewModelExcelReport) to more idiomatic ones if you possibly can.

people

See more on this question at Stackoverflow