如何遍历LINQ to Entities集合的集合?

时间:2017-01-27 20:29:01

标签: linq linq-to-entities

我有以下LINQ to Entities调用来填充集合变量:

var insuredFamily = db.Insureds.Where(x => x.ssn.Split('-')[0] == tmp[MemberId])
                      .OrderBy(x => x.fk_relation);

如何循环浏览集合中的项目,打印每行的项目标题和项目值?

我是LINQ to Entities的新手,所以我要做的就是遍历构建的集合并将标题和行输出到日志文件中,以便我可以快速查看集合中返回的内容求助于逐步调试调试器中的每一行。这可能吗?

如果无法使用通用循环,是否可以将数据网格的数据源设置为集合变量并在网格中查看集合?

2 个答案:

答案 0 :(得分:0)

对于初学者来说,这不是一个LINQ-to_Entities声明。没有办法将x.ssn.Split('-')[0] == tmp[MemberId]翻译成SQL。除非这是EF-Core,否则当表达式包含不支持的部分时,它会自动切换到客户端评估。你没有明确这一点。

无论如何,添加日志记录只是为了在调试时查看集合的内容,这太过分了。当代码在断点处停止时,您可以使用Visual Studio中的立即窗口输出数据。

要使此功能真正有用,请覆盖Insured类的ToString方法。当我用一些Product类...

执行此操作时
public override string ToString()
{
    return string.Format("{0}, {1}", this.Name, this.UnitPrice);
}

...然后在像......这样的行之后在调试器中中断。

var prod = context.Products;

..然后在即时窗口中我可以输入...

?prod.ToList()

......这给了我:

Count = 6
    [0]: {Nike Air, 150.00}
    [1]: {Web cam, 23.00}
    [2]: {Mouse, 7.00}
    [3]: {Cool pack, 4.50}
    [4]: {Keyboard, 47.30}
    [5]: {Action cam, 73.00}

(以及一些SQL日志记录)

请注意,这是侵入式调试。通过调用ToList,强制执行查询。此可能以影响代码行为的方式更改状态。虽然登录也是如此。

答案 1 :(得分:0)

感谢您提供所有建议,但看起来以下两行代码将满足我的需求。我只想想象我的LINQ to SQL查询的结果。

var nationalities = db.Nationalities.OrderBy(x => x.pk_Nationality);
dgvResults.DataSource = nationalities;

此代码只是将集合放入数据网格视图的数据源中,这样我就可以看到所有内容。