【问题标题】:Join multiple tables and single output using Entity Framework mvc5使用 Entity Framework mvc5 连接多个表和单个输出
【发布时间】:2018-08-24 08:22:20
【问题描述】:

我对 linq 查询非常陌生,所以我需要使用 Entity Framework mvc5 连接多个表和单个输出

下面是我的 3 个表结构,Table_Application 是一个主表

1) Table_Application

Id   ApplicationName    ServiceId     ProductID

1         Myapp           1               1

2) 表服务

ServiceId     SName
  1             S1

3) 表_产品

ProductID     PName
  1             P1

我需要基于 Table_Application ID 的 linq 列表中的 linq 输出结果数据

ApplicationName   SName   PName
 Myapp             S1      P1

我的 sql 查询类似的东西

select t1.ApplicationName,t2.SName,t3.PName from Table_Application t1,Table_Service t2,Table_Product t3 where t1.ServiceId =t2.ServiceId  and t1.ProductID=t3.ProductID and t1.Id="mysessionid"

我尝试了单表来但无法加入 Table_Service 和 Table_Product

  var IA = db.Applications
      .Where(x => x.ID == Id)
      .Select(IAview => new IAViewModel 
      {
          ApplicationName = IAview.ApplicationName


      }).ToList();

【问题讨论】:

  • 嗨@mahzar,你试过了吗?你被困在哪里了?
  • 我的表结构一些其他字段我应该发布我尝试过的内容吗?我用简单的语言解释。 @jeroenh
  • 理想情况下,您发布您尝试过的 C# 代码并解释您遇到的问题
  • 我已经编辑了我的问题,请检查并确认。 @jeroenh

标签: c# sql asp.net linq


【解决方案1】:

看看 LINQ 查询语法 - 它与 SQL 类似,因此如果您来自那种背景,则更容易理解。

http://www.tutorialsteacher.com/linq/linq-query-syntax 上有一个教程,它会给你一个基本的起点,然后你可以根据需要添加连接等。

请注意,以下内容未经测试,将为您提供 IAViewModel 对象列表,但我认为您需要类似于以下内容:

var a = (from app in db.Applications
join service in db.Services on app.ServiceId equals service.ServiceId
join product in sb.Products on app.ProductId equals product.ProductId
where app.Id == session_id
select new IAViewModel
{
    ApplicationName = app.ApplicationName,
    ServiceName = service.SName,
    ProductName = product.PName
}).ToList();

如果你只想要一个结果,你可以省略.ToList(),而使用.FirstOrDefault()之类的东西

【讨论】:

  • 如何传递会话值。 @加雷斯·刘易斯
  • @mazhar 我已经更新了我的答案以包含 where 子句
  • 我想评估这个视图模型请检查我的问题你的答案给出了正确的列表,但想像这样分配 .Select(IAview => new IAViewModel.@Gareth Lewis
  • @mazhar 我已经更新了我的答案,以展示如何从 LINQ 查询中选择新的 IAViewModel
【解决方案2】:
 var T = db.Table_Application.Join(
                    db.Table_Service,
                    TA=> TA.ServiceId,
                    TS => TA.ServiceId,
                    (TA,TS ) => new { TA, TS }
                    ).Join(
                    db.Table_Product,
                    TA2=> TA2.TA.ProductID,
                    TP => TP.ProductID,
                    (TA2, TP) => new { TA2, TP }
                    ).Where(c => c.TA.Id == "mysessionid").FirstOrDefault();

【讨论】:

  • 我会检查并备份您的答案。 @Dilip
  • 名称将如何选择 t1.ApplicationName,t2.SName,t3.PName。 @Dilip
  • FirstOrDefault() 将选择所有列,或者您可以使用 Linq Select 过滤列@mazhar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多