简体   繁体   English

使用LINQ从外键表获取数据

[英]Getting data from foreign key table using LINQ

I've 2 tables 我有2张桌子

DeviceType Table 设备类型表

id   Name 
1    Device Type 1
2    Device Type 2

Device Table 设备表

id   Name     Device Type Id (fk)
1    Device1  1
2    Device2  1
3    Device3  2

What I want is to query the data from device table with device type name using LINQ Methods . 我想要的是使用LINQ Methods从具有设备类型名称的设备表中查询数据。 I couldn't find the Include method to use here. 我找不到要在此处使用的Include方法。

I'm trying to get this in result 我正在努力做到这一点

id Name     DeviceType Name
1  Device1  Device Type 1
2  Device2  Device Type 1
3  Device3  Device Type 2
var device = from g in db.Devices
        join m in db.DeviceType on g.DeviceTypeId equals m.Id  
        select new 
        {
          Id = g.Id,
          Name = g.Name,
          DeviceTypeName = m.Name
        };

Or you can try something like 或者您可以尝试类似

var device = db.Devices
             .Join(db.DeviceType,
                 g => g.Id,      // Device Table Id 
                 m => m.Id,      // DeviceType Table Id
                 (g, m) => new { 
                               Id = g.Id, 
                               Name = g.Name, 
                               DeviceTypeName = m.Name 
              }) 
             .Where(deviceTyp => deviceTyp.g.ID == Id);     
             // where condition for g.DeviceTypeId equals m.Id  

You do not need to use .Include unless you want to get the related entities as well. 您无需使用.Include除非您也想获取相关的实体。 You can do something like this: 您可以执行以下操作:

context.Devices.Where(your conditions here)
      .Select(d=>new {Id = d.id, Name = d.Name, DeviceTypeName = d.DeviceType.Name})

You do not need to do join since there's a FK relationship (looks like that from the question), EF should pick up the relationship 由于存在FK关系,因此您无需join (看起来像问题中的那样),EF应该选择该关系

List<DeviceType> deviceTypeList = new List<DeviceType>() { 
            new DeviceType { id = 1, Name = "Device Type 1" }, 
            new DeviceType { id = 2, Name = "Device Type 2" } };

List<Device> deviceList = new List<Device>() { 
            new Device { id = 1, Name = "Device1", DeviceTypeId = 1 },
            new Device { id = 2, Name = "Device2", DeviceTypeId = 1 },
            new Device { id = 3, Name = "Device3", DeviceTypeId = 2 } };

//Linq
var query = from device in deviceList
        join type in deviceTypeList
        on device.DeviceTypeId equals type.id
        select new { Id = device.id, Name = device.Name,
        DeviceTypeName = type.Name };


//Or lambda expressions
var query = deviceList.Join(deviceTypeList,
        device => device.DeviceTypeId,
        type => type.id,
        (device, type) => new { Id = device.id, Name = device.Name, 
        DeviceTypeName = type.Name });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM