如何循环 LINQ to Entities collection 的 collection?

How do I loop through a collection of LINQ to Entities collection?

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

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

我将如何循环遍历 collection 中的项目打印出每行的项目 header 和项目值?

我是 LINQ to Entities 的新手,所以我想做的就是遍历构建的 collection 并将 header 和行输出到日志文件,以便我可以快速查看 collection 中返回的内容,而无需诉诸调试器中的每一行。这可能吗?

如果通用循环不可行,是否可以将数据网格的数据源设置为 collection 变量并在网格中查看 collection?

首先,这不能是 LINQ-to_Entities 语句。无法将 x.ssn.Split('-')[0] == tmp[MemberId] 翻译成 SQL。除非这是 EF-Core,否则当表达式包含 not-supported 部分时会自动切换到 client-side 评估。你没有明确说明这一点。

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

要使其真正有用,请覆盖 Insured class 的 ToString 方法。当我只用一些 Product class ...

public override string ToString()
{
    return string.Format("{0}, {1}", this.Name, this.UnitPrice);
}

... 并在类似 ...

的行后立即中断调试器
var prod = context.Products;

.. 然后立即 window 我可以输入 ...

?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,强制执行查询。此 可能 以影响代码行为的方式更改状态。这同样适用于日志记录。

感谢您的所有建议,但看起来以下两行代码可以满足我的需要。我只是想可视化我的 LINQ to SQL 查询的结果。

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

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