那是例子
SQL
create view v_join
as select m.* , d.oneDetail from master m, detail d
where m.key = d.key
LINQ
var view = from v in dc.v_join select new
{
Master = ???? /// that is an issue, how can I construct the objects using same fields but from another query,
Detail = v.oneDetail
};
foreach (var entry in view)
{
Master mEntry = entry.Master; // then we can use it, there are no problems
}
这种情况经常遇到,并且有一些棘手的方法来构建使用相同字段的对象,但是从另一个视图和使用。
当我在C#端进行这样的连接时,我得到了低性能,延迟加载等问题。无论如何LINQ发出许多查询以获取每个细节记录,在性能观点上是不可察觉的。
必须有明显的解决方案,我不敢相信没有人遇到同样的问题。 像dc.Translate这样的所有明显的解决方案几乎完全相同,但不完全是我需要的。
帮助表示赞赏。
答案 0 :(得分:1)
来自dc.Master中的m 在m.Key = d.Key上的dc.Detail中加入d 选择新的{m,d};
答案 1 :(得分:0)
这是否符合您的需求?
Master = new Master() { Field1 = v.Field1, Field2 = v.Field2, Field3 = v.Field3 }
答案 2 :(得分:0)
如果您确实需要,我建议您继续加入LINQ中的master-detail表,可以使用loadWith Options来摆脱延迟加载。在正确调整的同时,LINQ可以进行急切加载,从而解决性能问题。
答案 3 :(得分:0)
尝试使用DataLoadOptions和LoadWith,请参阅:http://dotnet.org.za/hiltong/archive/2008/02/12/lazy-loading-in-linq-loadwith-and-associatewith-dataloadoptions-part-1-loadwith.aspx
E.g。
System.Data.Linq.DataLoadOptions dl = new System.Data.Linq.DataLoadOptions();
dl.LoadWith<Detail>( detail => detail.Master )
答案 4 :(得分:0)