在运行下面的查询并在调试时将鼠标悬停在“usersToWork”上之后,除了与该值有关系的其他表外,我还可以查看我返回给我的单个条目的所有属性。我需要向用户显示的是“Lines.Id”(Lines是表,Id是Lines表中的列)值,但是该值会从SelectMany()语句中丢失。无论如何选择“Lines.Id”值以包含在我从所有连接中获得的最终值中?在下面的代码中,我注释了我想要的内容,但是我不能放在那里,否则我在第一个SelectMany语句中得到错误,说'int'不包含'Shifts'的定义而没有扩展方法'Shifts'接受a可以找到类型'int'的第一个参数。'
如果我错了,请纠正我,但SelectMany()选择您要加入的所有列。在这种情况下,在第一个SelectMany()中,我只得到“Shifts”表中的值,而在第二个SelectMany()中,我只得到“Users”表中的值。为什么这与SQL连接不同?加入SQL时,您可以在将每个列连接在一起时获取每个列,SelectMany()仅生成您要加入的第二个表的值。甚至可以在“Lines”表中获取该值,还是我必须进行另一个查询?任何帮助都会很棒。
int idEnteredByUser = 123;
var usersToWork = entityDataModel.Lines
//....NOT IN MY CODE NOW....
// .Select(line => line.Id)//THIS IS WHAT I NEED.
// .Select(line => line.Description, line.Id//OR THIS TO RETURN TWO VALUES IF POSSIBLE
//This is my current code, I need to include on of the select lines above.
.SelectMany(line => line.Shifts) //Join lines on shifts.
.Where(shift => shift.EndTime >= DateTime.Now) //Join restricted times.
.SelectMany(user => user.Users) //Join the restricted shift times on users.
.Where(user => user.UserId == idEnteredByUser ); //Only look for the specific user
答案 0 :(得分:1)
使用LINQ查询语法可以更轻松。
我假设您在发布的代码中输入了拼写错误,而user
属于shift
的属性。
var idEnteredByUser = 123;
var usersToWork =
from line in entityDataModel.Lines
from shift in line.Shifts
where shift.EndTime >= DateTime.Now
from user in shift.Users
where user.UserId == idEnteredByUser
select new
{
Description = line.Description,
Id = line.Id
};