如何使用linq表达式加入select语句

时间:2017-07-20 09:16:29

标签: c# linq

你有两个表有如下关系的表..

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;

2 个答案:

答案 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 
              });