有没有一种方法可以在linq- to -entities中进行左外部连接,而不需要将表映射到外键?
此外,如果我们公司决定坚持使用linq- to -entities,尽管它目前存在所有缺陷,您认为安装Visual Studio2010很重要吗?换句话说,Visual Studio2010中有什么可以帮助开发不在Visual Studio2008中的实体?
谢谢。
发布于 2009-10-26 15:11:15
这可能不会让您满意,因为对象没有正确扁平化,但是您可以执行外部联接并返回匿名类型的集合。
左外部连接与内部连接和except集合(第一个集合中不连接到第二个集合的部分)的并集相同。
在这里我只是简单地
计算内连接和计算except集合(创建一个空的B实体以确保类型是consistent)
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-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不同的数据支持。
在左外部连接方面:
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}
);https://stackoverflow.com/questions/1246021
复制相似问题