你有两个表有如下关系的表..
class Boothtable
{
public int BoothId {get;set;}
public string BoothName {get;set;}
public double Price {get;set;}
public int RoomId{get;set;}
}
class RoomTable
{
public int RoomId {get;set;}
public string RoomName{get;set;}
public sting Location {get;set;}
}
我正在尝试使用LINQ编写连接查询以将boothtable加入RoomId上的roomstable并返回boothtable中的所有属性,并仅返回Rooms表中的RoomName属性。是否有人可以指导我如何实现这一目标?
到目前为止,我有一个这样的linq exp,但它只返回booths表中的所有属性。
var getData = from boothtable in context.Boothtable
join roomtable in context.RoomTable
on boothtable.RoomId equals roomtable.RoomId
where boothtable.BoothId == someId
select boothtable;
答案 0 :(得分:6)
如果要从两者中检索属性,则必须投影包含两者的数据的对象。这使用匿名对象来执行此操作:
select new { boothtable, roomtable }
如果要从方法返回此匿名对象集合,请使用这两个属性定义自定义对象并将其实例化
select new YourCustomObjet { Booth = boothtable, Room = roomtable }
如果您只想要一些属性(最初错过它),那么当您在上面的示例中投影对象时,只需投影特定字段:
select new
{
boothtable.BoothId,
boothtable.BoothName,
boothtable.Price,
roomtable.RoomName
}
请注意,如果它是一个匿名对象且所需的属性名称相同,则无需显式定义名称
答案 1 :(得分:3)
试试这个 -
var getData = (from boothtable in context.Boothtable
join roomtable in context.RoomTable
on boothtable.RoomId equals roomtable.RoomId
where boothtable.BoothId == someId
select new
{
BoothId = boothtable.BoothId,
BoothName = boothtable.BoothName,
Price = boothtable.Price,
RoomName = roomtable.RoomName
});