【发布时间】:2013-12-05 01:12:44
【问题描述】:
我对 C# 中的 LINQ 和实体框架相当陌生,并且对于为什么我似乎无法将非常基本的 Where 命令输出作为 List 的结果进行迭代的解释不足。我在一个类中有以下方法来返回结果(为简单起见,我在示例中使用了通用变量名):
public List<MyTable> GetMyList(int ThisID)
{
return MyEntities.MyTable.Where(c => c.ForeignKey == ThisID).AsEnumerable().ToList();
}
然后在我的页面代码中,我可以调用并遍历结果:
List<MyTable> Table1 = GetMyList(1);
Table1.ForEach(delegate(MyTable TableDelegate)
{
string Value = TableDelegate.Column1
});
除了非常重要的一点,“Column1”的值永远不会改变,这一切都有效。在我正在处理的示例中,我使用我知道返回 3 条记录的值(如示例中的“ForeignKey”)提交查询,并且对于这 3 条记录,我知道“Column1”的值是每个人都不一样。然而,我得到的是第一条记录的 3 个实例。即,“Column1”的值不会随着“ForEach”的迭代而改变。我已经确认它使用断点进行了正确的迭代。
我尝试了不同的循环结构方法,包括普通的foreach 语句,以及使用Table1 的Count 索引作为限制的标准for 语句。结果相同。
挠头……
【问题讨论】:
-
您能否确认
Table1之前 中的第一行实际上有 3 个实例?还是它们是不同的行? -
不确定这意味着什么——抱歉...例如,当针对数据源(SQL Server)运行时,有问题的查询肯定会返回三个不同的不同行。
-
我的意思是..当您调试时,您的
List<MyTable>列表是否包含那些不同的行?我只是在检查您如何确认它们是不同的。我正在尝试确定您是否使用自己的 SQL 查询手动查询数据库以确认行是不同的。或者您是否已单步执行您的代码并且 LINQ 肯定会返回您不同的行。 -
您所做的只是一遍又一遍地将局部变量的值设置为等于 Column1 的值,该变量永远不会退出该循环。此外,您似乎在这里有很多循环复杂性。也许解释一下你希望你的最终结果是什么?
-
基本上,如果我理解正确,这不应该发生。您正在使用
ForEach的什么实现?这是习俗吗?我认为我们需要查看更多代码。
标签: c# asp.net linq entity-framework ienumerable