首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq-To-Entities中的左外连接

Linq-To-Entities中的左外连接
EN

Stack Overflow用户
提问于 2009-08-07 17:31:05
回答 2查看 6.5K关注 0票数 1

有没有一种方法可以在linq- to -entities中进行左外部连接,而不需要将表映射到外键?

此外,如果我们公司决定坚持使用linq- to -entities,尽管它目前存在所有缺陷,您认为安装Visual Studio2010很重要吗?换句话说,Visual Studio2010中有什么可以帮助开发不在Visual Studio2008中的实体?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2009-10-26 15:11:15

这可能不会让您满意,因为对象没有正确扁平化,但是您可以执行外部联接并返回匿名类型的集合。

左外部连接与内部连接和except集合(第一个集合中不连接到第二个集合的部分)的并集相同。

在这里我只是简单地

计算内连接和计算except集合(创建一个空的B实体以确保类型是consistent)

  • combine

LINQ并不漂亮,但它很可爱。

代码语言:javascript
复制
class A
{
    public int Id { get; set; }
    public string PropertyA { get; set; }        
}

class B
{
    public int Id { get; set; }
    public string PropertyB { get; set; }
}   

var aThings = new List<A>();
var bThings = new List<B>();

var innerJoin = aThings.SelectMany(a => 
    bThings.Where(b => a.Id == b.Id).Select(b => new { a, b })).ToList();

var exceptSet = aThings.Where(a => 
    !bThings.Select(b => b.Id).Contains(a.Id)).Select( a =>
    {
        B b = new B();
        return new { a, b };
     });

var outerJoin = innerJoin;
outerJoin.AddRange(exceptSet);

结果是匿名类型的列表{a,b}

票数 1
EN

Stack Overflow用户

发布于 2009-08-07 17:49:26

微软有两个数据团队,他们都有相同的目标: LINQ-to-SQL和ADO.NET entity。实体的ADO.NET现在提供了支持,这意味着LINQ-to-SQL不会像ADO.NET产品那样优先考虑。

Visual Studio2010支持SQL4,这反过来又支持实体的ADO.NET和.NET -to-SQL.除了VS2010中提供的许多生产力功能之外,我还没有看到多少与VS2008不同的数据支持。

在左外部连接方面:

代码语言:javascript
复制
var dc = new DataContext();

var query = (
    from t1 in dc.MyTable
    join a in MyJoinedTable on p.Id equals a.Id into tempTable
    from t2 in tempTable.DefaultIfEmpty()
    select new { p.Column1, p.Column2, t2.Column1}
    );
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1246021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档