C# IEnumerable<&燃气轮机;被foreach代码跳过;转换IEnumerable<&燃气轮机;列出<&燃气轮机;不归还任何东西

C# IEnumerable<&燃气轮机;被foreach代码跳过;转换IEnumerable<&燃气轮机;列出<&燃气轮机;不归还任何东西,c#,.net,linq,.net-4.5,windows-8.1,C#,.net,Linq,.net 4.5,Windows 8.1,基本上我有这个代码: public static async Task<bool> SubmitOrdertoBroker(CASOrderModel order, IEnumerable<CASOrderItemModel> modelOrderItems) { ObservableCollection<CASOrderItem> casOrderItemModel = new ObservableCollection<CASOrderI

基本上我有这个代码:

public static async Task<bool> SubmitOrdertoBroker(CASOrderModel order, IEnumerable<CASOrderItemModel> modelOrderItems) 
{
      ObservableCollection<CASOrderItem> casOrderItemModel = new ObservableCollection<CASOrderItem>();

      var i = (from m in modelOrderItems select m).ToList();

      foreach (dynamic item in modelOrderItems)
      {
           CASOrderItem orderItem;

           orderItem = new CASOrderItem();
           orderItem.Createdby = item.Createdby;
           orderItem.CreatedDate = item.CreatedDate;
           orderItem.ItemMetaPK = item.ItemMetaPK;
           orderItem.OrderItem = item.OrderItem;
           orderItem.OrderItemID = item.OrderItemID;
           orderItem.ParentOrderID = item.ParentOrderID;
           orderItem.PrdMainPK = item.PrdMainPK;
           orderItem.Quantity = item.Quantity;
           orderItem.TacticPkey = item.TacticPkey;

           casOrderItemModel.Add(orderItem);
      }
      return true;
}
public静态异步任务SubmitOrdertoBroker(casorderModelOrder,IEnumerable modelOrderItems)
{
ObservableCollection casOrderItemModel=新的ObservableCollection();
var i=(从modelOrderItems中的m选择m).ToList();
foreach(modelOrderItems中的动态项)
{
CASOrderItem orderItem;
orderItem=新CASOrderItem();
orderItem.Createdby=item.Createdby;
orderItem.CreatedDate=item.CreatedDate;
orderItem.ItemMetaPK=item.ItemMetaPK;
orderItem.orderItem=item.orderItem;
orderItem.OrderItemID=item.OrderItemID;
orderItem.ParentOrderID=item.ParentOrderID;
orderItem.PrdMainPK=item.PrdMainPK;
orderItem.Quantity=item.Quantity;
orderItem.TacticPkey=item.TacticPkey;
casOrderItemModel.Add(orderItem);
}
返回true;
}
这些问题是:

1.)foreach{}块没有迭代,它只是跳过代码(即使modelOrderItems中有4个项),从而使我的casOrderItemModel为空(我将其传递给该代码之后的另一个代码块,该代码块假定填充了集合)

2.)如果我尝试将IEnumerable转换为列表,则该列表不包含任何项

请让我知道如何解决此问题


谢谢。:)

您的函数接受一个参数
IEnumerable modelOrderItems
,您可以对该参数调用
ToList()

但随后您将迭代
modelOrderItems
,而不是迭代
i

foreach (dynamic item in modelOrderItems) { ... }
对同一个可枚举集合求值两次可能会导致第二次迭代为空,具体取决于集合的源。尝试执行此操作并删除未使用的
ToList()
行:

foreach (CASOrderItemModel item in modelOrderItems) { ... }
或者,如果您真的想在其中包含显式的
ToList()

foreach (var item in i) { ... }

最后,由于集合包含强类型项
CASOrderItemModel
,因此使用
dynamic
没有任何意义。

函数接受一个参数
IEnumerable modelOrderItems
,对该参数调用
ToList()

但随后您将迭代
modelOrderItems
,而不是迭代
i

foreach (dynamic item in modelOrderItems) { ... }
对同一个可枚举集合求值两次可能会导致第二次迭代为空,具体取决于集合的源。尝试执行此操作并删除未使用的
ToList()
行:

foreach (CASOrderItemModel item in modelOrderItems) { ... }
或者,如果您真的想在其中包含显式的
ToList()

foreach (var item in i) { ... }

最后,由于您的集合包含一个强类型的项
CASOrderItemModel
,因此使用
dynamic
没有任何意义。

尝试使用
列表更改
IEnumerable
。我的假设是,由于它是一个接口,因此必须有一个对象在应用程序中的任何位置保存列表。

尝试使用
列表更改
IEnumerable
。我在这里的假设是,因为它是一个接口,所以必须有一个对象在应用程序中的任何位置保存您的列表。

这没有意义。modelOrderItems可能为空。使用
int count=modelOrderItems.count()
确保您有一个CASOrderModel、CASOrderItemModel、CASOrderItem和一个名为CASOrderItemModel的变量,该变量包含名称中没有模型的CASOrderItem。以及一个名为modelOrderItems的参数,该参数包含CASOrderItemModel。我敢肯定,您只是在这里对自己的命名约定感到困惑。您的“I”变量我从未使用过
IEnumerable
的来源是什么?如果它是可耗尽的,那么您已经在
ToList
中耗尽了它。为什么是动态的?试试CASOrderItemModel。尝试var i=newlist(modelOrderItems),这没有意义。modelOrderItems可能为空。使用
int count=modelOrderItems.count()
确保您有一个CASOrderModel、CASOrderItemModel、CASOrderItem和一个名为CASOrderItemModel的变量,该变量包含名称中没有模型的CASOrderItem。以及一个名为modelOrderItems的参数,该参数包含CASOrderItemModel。我敢肯定,您只是在这里对自己的命名约定感到困惑。您的“I”变量我从未使用过
IEnumerable
的来源是什么?如果它是可耗尽的,那么您已经在
ToList
中耗尽了它。为什么是动态的?试试CASOrderItemModel。试试var i=new List(modelOrderItems)你能解释一下如何解决这个问题吗?将其更改为
列表
有什么区别?您能解释一下如何解决问题吗?如果将其更改为
列表
,会有什么区别?这并不能解释i.Count=0您是对的。但是,根据公认的答案判断,无论如何,还有一些完全奇怪的事情正在发生。这并不能解释i.Count=0你是对的。但根据公认的答案判断,无论如何,还有一些完全奇怪的事情正在发生。