Can this LINQ lambda expression be written any better?
LINQ isn't as rigid about the order of clauses as SQL is (this applies to both syntaxes). This means that if you switch your Join around, you can put your Where before your Join.
If you have Select right after Join, you can combine the two together.
When the property you're using in an anonymous object creation expression has the same name as the one you're assigning it to, you can omit the name.


This means that your code could be simplified to this:

COURSE_RELATED_VERSIONS
.Where (crv =&gt; crv.COURSE_ID == 38890 &amp;&amp; crv.COURSE_PARENT_NODE_ID == -1)
.Join (
   COURSE_TREEs, 
   crv =&gt; crv.COURSE_NODE_ID,
   ct =&gt; ct.COURSE_NODE_ID,
   (crv, ct) =&gt; new { ct.COURSE_NODE_ID, ct.NODE_TEXT }
)


But in general, if you're doing something more complicated, you need to follow the pattern in your question. Which is exactly why the query syntax exists: it can make complicated queries much simpler.

Also, I would suggest that your tweak your mapping so that the names follow usual .Net naming conventions (e.g. CourseRelatedVersion or CourseNodeId).