1

有没有办法在 linq-to-entities 中进行左外连接,而无需使用外键映射表?

此外,如果我们公司决定坚持使用 linq-to-entities,尽管它目前存在所有缺陷,您认为获得 Visual Studio 2010 重要吗?换句话说,Visual Studio 2010 中有什么可以帮助使用 Visual Studio 2008 中没有的实体进行开发?

谢谢。

4

2 回答 2

1

这可能无法满足您的要求,因为对象未正确展平,但您可以执行外连接并返回匿名类型的集合。

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

这里我简单

  • 计算内连接
  • 计算 except 集(创建一个空的 B 实体以确保类型一致)
  • 将两组结合起来。

LINQ 不漂亮,但很可爱。

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}

于 2009-10-26T07:11:15.493 回答
-1

Microsoft 有两个数据团队,它们都朝着相同的目标:LINQ-to-SQL 和 ADO.NET 实体。现在支持 ADO.NET for Entities,这意味着 LINQ-to-SQL 的优先级不会像 ADO.NET 产品那样高。

Visual Studio 2010 支持 .NET 4,而后者又支持实体的 ADO.NET 和 LINQ-to-SQL。除了 VS2010 中提供的生产力功能的数量之外,我在数据支持方面没有看到太多与 VS2008 不同的地方。

在左外连接方面:

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}
    );
于 2009-08-07T17:49:25.620 回答