0

那是例子

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 这样的所有显而易见的解决方案几乎都是一样的,但并不完全符合我的需要。

帮助表示赞赏。

4

5 回答 5

1

from m in dc.Master join d in dc.Detail on m.Key = d.Key select new { m, d };

于 2009-07-07T14:35:05.440 回答
0

这是否满足您的需求?

Master = new Master() { Field1 = v.Field1, Field2 = v.Field2, Field3 = v.Field3 }
于 2009-07-07T14:32:53.243 回答
0

对我来说,这听起来很奇怪。您使用视图的原因是在模型上有不同的“视图”,而不是访问原始模型。

如果你真的需要,我建议你继续加入 LINQ 中的主从表,你可以使用loadWith Options摆脱延迟加载。正确调整后,LINQ 可以进行预先加载,从而解决性能问题。

于 2009-07-07T14:36:06.967 回答
0

尝试使用 DataLoadOptions 和 LoadWith,请参阅:http://dotnet.org.za/hiltong/archive/2008/02/12/lazy-loading-in-linq-loadwith-and-associatewith-dataloadoptions-part-1-loadwith。 aspx

例如

System.Data.Linq.DataLoadOptions dl = new System.Data.Linq.DataLoadOptions();
dl.LoadWith<Detail>( detail => detail.Master )
于 2009-07-07T14:40:00.127 回答
0

你不能从 v in dc.v_join select new { Master = new { Column1Name = v.masterColumn1, Column2Name = v.masterColumn2, ... }, Detail = v.oneDetail }; ?

于 2009-07-07T14:56:09.680 回答