【问题标题】:Combine two tables using Entity Framework [closed]使用实体框架组合两个表[关闭]
【发布时间】:2013-10-31 16:17:27
【问题描述】:

我有以下疑问:

{
 SELECT A.Id, C1.FullName AS APerson, C2.FullName As BPerson
 FROM TableA AS A
   LEFT JOIN TableC AS C1 ON A.FK_PersonA = C1.Id
   LEFT JOIN TableC AS C2 ON A.FK_PersonB = C2.Id
 UNION
 SELECT B.Id, B.FullName1 AS APerson, B.FullName2 AS BPerson
 FROM TableB AS B
}

我想将其转换为实体框架 lambda 查询,这可能吗?

数据模型

【问题讨论】:

  • 是的,这是可能的。但是,首先格式化你的 sql 代码,并显示你的模型。
  • 有可能。你做了什么努力?先编码还是 edmx?
  • 我正在使用派生自数据库的 edmx(DB 优先方法)。不知道如何在 SF 上格式化查询,对 SF 来说有点新。
  • 更新格式。正在研究模型。
  • @Alexander 根据您的 cmets 更新了问题

标签: c# sql entity-framework lambda entity-framework-5


【解决方案1】:

首先,您应该为您的模型创建存储库。阅读此here。 所以,你可以使用这个:

var ret = 
    (from taRec in TableA.GetAll()
    join tc1 in TableC.GetAll on taRec.FK_PersonA equals tc1.Id
      into tcRecs1
    from tcRec1 in tcRecs1.DefaultIfEmpty()
    join tc2 in TableC.GetAll on taRec.FK_PersonB equals tc2.Id
      into tcRecs2
    from tcRec2 in tcRecs2.DefaultIfEmpty()
    select new {
        taRec.Id, APerson = tcRec1.FullName, BPerson = tcRec2.FullName
    }).Union(
        from tbRec in TableB.GetAll()
        select new {
            tbRec.Id, APerson = tbRec.FullName, BPerson = tbRec.FullName
    });

【讨论】:

  • 旧的 winform 软件存储库模式没有预先计划,所以我无法更改。
  • 使用另一种模式,我向您展示了如何使用 linq 查询。在你的描述中没有关于使用的模式和 EF 模型的信息。
  • 我正在使用实体框架和基于 lambda 的查询,这在我的问题中有所说明。我没有使用任何其他模式。我想我可以将您提供的内容转换为基于 EF lambda 的查询。
  • 首先你应该创建存储库。在这个问题的背景下,这太过分了。实体框架有存储库,它们被称为 DbSet。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
相关资源
最近更新 更多