Я обнаружил, что мне больше всего повезло со сложными внутренними запросами с помощью выражений let. Это делает отбор и позволяет вам более гибко связывать элемент из отборов. ОДНАКО, обратите внимание, что я делаю First () только для назначения автора в анонимном объекте. Это потому, что если вы сделаете First (). PropertyName и First выдаст нулевое значение, оно взорвется.
Удачи и двойной проверки синтаксиса. У меня нет полного набора объектов, поэтому я не могу сгенерировать полностью работающую демонстрацию, однако, это было протестировано с деревом объектов, которое есть в одном из моих собственных проектов.
var books = (
from b in db.BOOKs
let author = (from a in db.PEOPLEs
where b.AUTHOR == a.ID
select a)
select new
{
ID = b.ID,
NAME = b.Name,
Author = author.First()
}
).ToList();
foreach(var x in books)
{
string AuthorName = x.Author.USER_ID;
//Do other stuff
}