我试图从一对多关系的“多”表中获取记录,并将它们作为列表添加到“一个”表中的相关记录中。
我也试图在单个数据库请求中执行此操作。
从Linq to Sql - Populate JOIN result into a List派生的代码几乎达到了预期的结果,但在'one'表中每个条目都有一个数据库请求,这是不可接受的。那个失败的代码在这里:
var res = from variable in _dc.GetTable<VARIABLE>()
select new { x = variable, y = variable.VARIABLE_VALUEs };
但是,如果我执行类似的查询但循环遍历所有结果,则只会发出一个数据库请求。此代码实现了所有目标:
var res = from variable in _dc.GetTable<VARIABLE>()
select variable;
List<GDO.Variable> output = new List<GDO.Variable>();
foreach (var v2 in res)
{
List<GDO.VariableValue> values = new List<GDO.VariableValue>();
foreach (var vv in v2.VARIABLE_VALUEs)
{
values.Add(VariableValue.EntityToGDO(vv));
}
output.Add(EntityToGDO(v2));
output[output.Count - 1].VariableValues = values;
}
然而,后面的代码很丑陋,而且它真的感觉像是在单个linq查询中应该可以执行的操作。
那么,如何才能在只进行单个数据库查询的单个linq查询中完成此操作?
在这两种情况下,使用以下代码将表设置为preload: _dc = _db.CreateLinqDataContext();
var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<VARIABLE>(v => v.VARIABLE_VALUEs);
_dc.LoadOptions = loadOptions;
我使用的是.NET 3.5,数据库后端是使用SqlMetal生成的。
答案 0 :(得分:0)
此链接可能有所帮助
http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx
查看连接运算符。你可能不得不改变使用扩展语法的其他语法。像这样,
var = from obj in dc.Table
from obj2 in dc.Table2
where condition
select