使用另一个查询的相同字段从LINQ构造对象

时间:2009-07-07 14:27:15

标签: c# linq-to-sql construction

那是例子

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这样的所有明显的解决方案几乎完全相同,但不完全是我需要的。

帮助表示赞赏。

5 个答案:

答案 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)

你不能这样做吗? 来自dc.v_join中的v 选择新{ Master = new {Column1Name = v.masterColumn1,Column2Name = v.masterColumn2,...}, Detail = v.oneDetail }; ?