C#foreach循环未遍历项
本文关键字:遍历 循环 C#foreach | 更新日期: 2023-09-27 17:57:29
Am试图用List的内容填充数据网格,但之后列表包含了适当数量的项,所有项都具有相同的数据行。例如,当按=8时,SQL中返回了三个不同的批,但在C#中有一个批返回了三次。我不确定问题是在我的查询还是foreach循环中,但我在循环中使用了一个消息框来显示当前的ScheduleNr,而且它总是一样的。
List<BatchList> myBatches = new List<BatchList>();
BatchList batch;
var db = new BatchListContext();
var batchQuery = from b in db.BatchLists
where b.Press == press
orderby b.ExtrDate, b.BatchNr
select b;
if (batchQuery.Count() == 0)
{
MessageBox.Show("Error loading batches", "Error", MessageBoxButton.OK);
return false;
}
foreach (var batchItem in batchQuery)
{
batch = new BatchList();
batch.ScheduleNr = batchItem.ScheduleNr;
batch.BatchNr = batchItem.BatchNr;
batch.Press = batchItem.Press;
batch.ExtrDate = batchItem.ExtrDate;
batch.NoOrders = batchItem.NoOrders;
myBatches.Add(batch);
MessageBox.Show(String.Format("{0}", batchItem.ScheduleNr.ToString())); //Always shows same ScheduleNr
}
如果我可能犯了一个根本性的错误,任何建议都将不胜感激。
非常感谢。
//编辑BatchList是一个SQL Server视图,如果在SSMS中查询如下:
SELECT * FROM BilletPlanner.BatchList WHERE Press = 8
退货:
ScheduleNr BatchNr Press ExtrDate NoOrders
10035620 2 8 2015-06-22 32
10035629 3 8 2015-06-22 22
10035631 4 8 2015-06-23 32
但是我在C#中使用的DataGrid显示了以下内容(由于目前无法粘贴图像,因此无法进行粗略复制)
ScheduleNr BatchNr Press ExtrDate NoOrders
10035620 2 8 22/06/2015 32
10035620 2 8 22/06/2015 32
10035620 2 8 22/06/2015 32
假设这是实体框架访问SQL Server视图:EF中视图的一个常见问题是主键混淆。EF倾向于通过在元数据中可以看到的数据类型来尝试从视图中确定什么是真正唯一的值。我建议调整您的视图,使其具有明确的唯一主键(强制转换为int,distinct等等)。从本质上讲,EF混淆了其他列中的一列(按,NoOrders)作为主键,重复的值意味着EF复制了整行。这是一个必须处理的非常愚蠢的问题。