有没有办法在linq-to-entities中进行左外连接而不用使用外键映射表?
此外,如果我们公司决定坚持使用linq-to-entity尽管目前存在各种缺陷,您认为获得Visual Studio 2010很重要吗?换句话说,Visual Studio 2010中有哪些内容可以帮助开发不在Visual Studio 2008中的实体?
感谢。
答案 0 :(得分:1)
这可能不满足您,因为对象没有正确展平,但您可以执行外部联接并返回匿名类型的集合。
左外连接与内连接和外集(第一组中未连接到第二组的部分)的并集相同。
我只是
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}
答案 1 :(得分:-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}
);