我想联合2个表并在数据网格中显示所有内容:
在datagrid中,我有2个匹配的列(StartTime,EndTime)和2个不同的列。我仍然要联合这两个表并为学校/主题设置第3列,为住宿/位置设置第4列。
在PHP中,我知道您可以使用
为您获得的字段设置名称SELECT x AS name
但我对LINQ语法不是很熟悉。
在这里,我从月份日历中选择的日期开始从tblReservation获取数据:
var vReservation = (from oReservation in clsApplication._oDBConnection.tblReservations
where oReservation.StartTime.Value.Date >= mcCalendar.SelectionRange.Start.Date
&& oReservation.StartTime.Value.Date < cCalendar.SelectionRange.Start.Date.AddHours(24)
orderby oReservation.StartTime ascending
select oReservation);
foreach (var oReservation in vReservation)
{
build the datagrid
}
如何将其他表添加到此循环中?
答案 0 :(得分:0)
在选择中您可以执行类似
的操作select new { oReservation.StartTime, oRservation.EndTime };
然后使用Union()扩展方法传递其他查询以将它们组合在一起 请参阅第二个方框here以获取示例
答案 1 :(得分:0)
假设您具有以下实体;
public class tblReservation
{
public tblReservation(int id, DateTime startTime, DateTime endTime, int schoolID, int accomodationID)
{
ID = id;
StartTime = startTime;
EndTime = endTime;
SchoolID = schoolID;
AccomodationID = accomodationID;
}
public int ID { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public int SchoolID { get; set; }
public int AccomodationID { get; set; }
}
public class tblMeeting
{
public tblMeeting(int id, DateTime startTime, DateTime endTime, string subject, string location)
{
ID = id;
StartTime = startTime;
EndTime = endTime;
Subject = subject;
Location = location;
}
public int ID { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string Subject { get; set; }
public string Location { get; set; }
}
我用如下所示的伪数据填充了这些实体;
var tblReservations = new List<tblReservation>() { new tblReservation(1,DateTime.MinValue, DateTime.MinValue.AddHours(1),1,1), new tblReservation(2, DateTime.MinValue, DateTime.MinValue.AddHours(2), 2, 3) };
var tblMeetings = new List<tblMeeting>() { new tblMeeting(1, DateTime.MinValue, DateTime.MinValue.AddHours(1),"subject1","location1"), new tblMeeting(2, DateTime.MinValue, DateTime.MinValue.AddHours(2), "subject2", "location2") } ;
随后的LINQ将根据需要提供结果。
var result = tblReservations.Join(tblMeetings, x => string.Concat(x.StartTime,x.EndTime), y => string.Concat(y.StartTime,y.EndTime), (x, y) => new { x, y })
.Select(m => new tblMeeting(m.x.ID, m.x.StartTime, m.x.EndTime, string.Concat(m.x.SchoolID, "/", m.y.Subject), string.Concat(m.x.AccomodationID, "/", m.y.Location)));
我已经使用 tblMeeting 作为结果类型,如果您愿意,可以根据需要创建一个新类型。