代码之家  ›  专栏  ›  技术社区  ›  Patricia

Linq如何在FROM中将子select用作虚拟表

  •  1
  • Patricia  · 技术社区  · 7 年前

    这里可能会有类似的问题,但我在 来自 子句作为虚拟表。

    桌子需要从不同的表中获取一些列,如果没有笛卡尔连接,我将无法连接这些列。

    SELECT meter_name, a.loc_id, a.loc_name, a.facility_name, meter_type
    FROM   meter_table, (SELECT  loc_id, loc_name, facility_name
                         FROM    facility_table
                         WHERE   id = 101) a
    WHERE meter_id = a.fac_id
    

    我不知道如何将其转换为Linq,必须在今晚早上进行演示。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ousmane D.    7 年前

    假设这代表您的 meter_table 在数据库中 在这种情况下,列表的每个元素表示数据库表中包含适当属性的记录 i、 表列将成为每个对象的属性

    List<Meter> meter_table = new List<Meter>();
    

    facility_table 要加入的表。 这里也是一样,列表的每个元素表示数据库表中包含适当属性的记录 i、 表列将成为每个对象的属性

    List<Facility> facility_table = new List<Facility>();
    

    var query = from m in meter_table
                join a in facility_table on m.meter_id equals a.fac_id
                where a.id == 101
                select new { meter_name = m.MeterName, 
                             loc_id = a.LocId, 
                             facility_name = a.FacilityName,
                             meter_type = m.MeterType
                           };
    

    哪里 m.MeterName , a.LocId , a.FacilityName , m.MeterType 是其各自类型的属性。

    值得注意的是变量 查询 IEnumerable可数 匿名类型的。但是,如果您想返回 IEnumerable 然后可以用适当的属性定义自己的类型,然后只需更改 select new 收件人:

    select new typeName { /* assign values appropriately */}
    

    以上查询的。