【发布时间】:2019-09-05 00:12:18
【问题描述】:
我有 3 个表我需要从中获取数据实际上只有 2 个我需要使用 Linq 进行连接,但我需要来自预计的项目名称,我需要将其插入我使用 linq 创建的相同模型。我在 context.Projects 中尝试了 proj.ProjectId = detail.ProjectId 但它说不能将 int 转换为 bool 并且我没有在任何地方声明 bool?这是我的linq。而整个方法实际上
PS - 这是我创建的最新操作,但仍然不是 100% 正确,但这是获取 3 个表数据的正确想法吗?
public ActionResult DisplayAllTimeSheetDetails(int masterid)
{
var masterModel = context.TimeSheetMaster.Where(w =>
w.TimeSheetMasterId.Equals(masterid)).FirstOrDefault();
var detailM = context.TimeSheetDetails.Where(t =>
t.TimeSheetMasterId.Equals(masterModel.TimeSheetMasterId))
.FirstOrDefault();
var project = context.Projects.Where(p => p.ProjectId.Equals(
detailM.ProjectId)).FirstOrDefault();
var details = (from master in context.TimeSheetMaster
join detail in context.TimeSheetDetails
on master.TimeSheetMasterId equals detail.TimeSheetMasterId
//from proj in context.Projects where proj.ProjectId = detail.ProjectId
select new TimeSheetDetailsModel()
{
Sunday = detail.Sunday,
Monday = detail.Monday,
Tuesday = detail.Tuesday,
Wednesday = detail.Wednesday,
Thursday = detail.Thursday,
Friday = detail.Friday,
Saturday = detail.Saturday,
Hours = detail.Hours,
Comment = master.Comment,
ProjectName = project.ProjectName
}).ToList();
return View(details);
}
public class TimeSheetDetailsModel
{
[Display(Name = "Time Sheet ID")]
public int TimeSheetId { get; set; }
[Display(Name = "Day of Week")]
public string DaysOfWeek { get; set; }
[Display(Name = "Hours")]
public int? Hours { get; set; }
[Display(Name = "Period")]
public string Period { get; set; }
[Display(Name = "Project ID")]
public int ProjectId { get; set; }
[Display(Name = "User ID")]
public string UserId { get; set; }
[Display(Name = "Date Created")]
public DateTime DateCreated { get; set; }
[Display(Name = "Time Sheet Master ID")]
public int TimeSheetMasterId { get; set; }
[Display(Name = "Project Name")]
public string ProjectName { get; set; }
public string Comment { get; set; }
public int Sunday { get; set; }
public int Monday { get; set; }
public int Tuesday { get; set; }
public int Wednesday { get; set; }
public int Thursday { get; set; }
public int Friday { get; set; }
public int Saturday { get; set; }
}
【问题讨论】:
-
我想你可能在构思你的想法时遇到了麻烦——我根本无法理解
-
请把型号放在这里
-
为什么还需要明确加入?您的 TimeSheetMasterDetail 应该有 TimeSheetMaster 导航属性,您可以使用它 - EF 将隐式处理连接。您的项目也是如此,其中 TimeSheetDetails 应该有一个项目导航属性。
-
如果您确实需要来自第三张表的数据,您确实需要第二次连接(或执行单独的查询,但这也只是执行 FK=PK 索引扫描)。但是,请注意 LINQ 语法是 c# 语法,因此您需要使用 == 运算符(而不是 where 子句中的 = 运算符)进行 PK=FK 比较
-
这是我正在填充的模型 我在时间表表中拥有所有数据,除了项目我需要调用第三个表以通过 Id 获取项目名称,但我不需要进行任何联接对于这个查询,我只需要项目名称,这是我的模型,我正在填充 public int TimeSheetId { get;放; } 公共字符串 DaysOfWeek { 获取;放; } 公共整数?小时{得到;放; } 公共整数?项目 ID { 获取;放; } 公共字符串用户 ID { 获取;放; } + 更多属性字段,它只是一个具有 3 个表字段的模型
标签: c# entity-framework linq asp.net-mvc-5