将JOIN填充到一个数据库查询中的列表中

时间:2010-05-13 04:47:40

标签: linq-to-sql

我试图从一对多关系的“多”表中获取记录,并将它们作为列表添加到“一个”表中的相关记录中。

我也试图在单个数据库请求中执行此操作。

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生成的。

1 个答案:

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