Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#mvc获取表1中的所有id并保存到表2中?_C#_Asp.net_Asp.net Mvc_Linq_Asp.net Mvc 5 - Fatal编程技术网

如何使用c#mvc获取表1中的所有id并保存到表2中?

如何使用c#mvc获取表1中的所有id并保存到表2中?,c#,asp.net,asp.net-mvc,linq,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Linq,Asp.net Mvc 5,我是这里的新手。我使用的是c#MVC5。 我将尝试在表1中获取所有状态为“已拾取”的id,并保存到表2中 这是我的错误 无法将类型为“WhereSelectListIterator`2[ChenvelIntl.Core.Domain.Packages.Package,System.Int32]”的对象强制转换为类型为“System.IConvertible” 这是我的密码。但它不起作用。有人能帮我解决这个问题吗 var package = _packageService.GetAll().Whe

我是这里的新手。我使用的是c#MVC5。
我将尝试在表1中获取所有状态为“已拾取”的id,并保存到表2中

这是我的错误

无法将类型为“WhereSelectListIterator`2[ChenvelIntl.Core.Domain.Packages.Package,System.Int32]”的对象强制转换为类型为“System.IConvertible”

这是我的密码。但它不起作用。有人能帮我解决这个问题吗

var package = _packageService.GetAll().Where(x => x.Status == "Picked-up");

var shipmentItem = new ShipmentItem
{
    ShipmentId = model.ShipmentId
};

if (package != null)
{
    shipmentItem.PackageId = Convert.ToInt32(package.Select(x => x.Id));
}
_shipmentItemService.Add(shipmentItem);
return RedirectToAction("addshipmentitem");

package
变量将包含一个
WhereSelectListIterator
或一个链接到多个包的对象

将其更改为
.First()
,例如

var package = _packageService.GetAll().First(x => x.Status == "Picked-up");
然后在下面:

// If package.Id is not an Int32 already...
shipmentItem.PackageId = Convert.ToInt32(package.Id);
如果需要全部,请按如下方式更改代码:

   var packages = _packageService.GetAll().Where(x => x.Status == "Picked-up").ToArray().Where(x => x != null).ToArray();
                  foreach(var package in packages) {
                    var shipmentItem = new ShipmentItem
                    {
                        ShipmentId = model.ShipmentId,
                        PackageId = Convert.ToInt32(package.Id)
                    };

                    _shipmentItemService.Add(shipmentItem);
                   }
                    return RedirectToAction("addshipmentitem");

就这么做吧:

     var shipmentItems= _packageService.GetAll()
                        .Where(x => x.Status == "Picked-up")
                        .Select(x=>new ShipmentItem(){ShipmentId = x.ShipmentId , PackageId=int.Pars(x.Id)});

     if(shipmentItems.Any())
    _shipmentItemService.Add(shipmentItems);   

    return RedirectToAction("addshipmentitem");
如果_shipmentItemService.Add()只收到一个要添加的shipmentItem,请执行以下操作:

shipmentItems.ToList().ForEach(x=>_shipmentItemService.Add(x))
您将获得一个整数数组packageId 然后循环抛出数组并逐个添加装运项目。。 我希望它能奏效

 foreach (var packageId in packageIds)
                {
                    var shipmentItem = new ShipmentItem
                    {
                        ShipmentId = model.ShipmentId,
                        PackageId = Convert.ToInt32(packageId)
                    };
                    _shipmentItemService.Add(shipmentItem);

                }

如果您将函数拆分并将
var
更改为实际类型,您将立即看到您的问题:

IEnumerable<Package> fetchedPackages = _packageService.GetAll();
IEnumerable<Package> pickedUpPackages = fetchedPackages
   .Where(package => package.Status == "Picked-up");

注意:如果没有此类pickedUpPackageId,则无论何时出现错误,该值都将为零

,请务必在哪一行告诉我们。您好,谢谢您的回复。如果我把它改成。首先我得到1个值。我需要获取状态为“已拾取”的所有id,并将所有id保存在表2中。@DenmarkDelPuso问题中的每个答案旁边都应该有一个复选标记,单击它将把答案标记为已接受。
IEnumerable<Package> fetchedPackages = _packageService.GetAll();
IEnumerable<Package> pickedUpPackages = fetchedPackages
   .Where(package => package.Status == "Picked-up");
IEnumerable<int> pickedUpPackageIds = pickedupPPages
    .Select(pickedUpPackage => pickedUpPackage.Id);
shipmentItem.PackageId = Convert.ToInt32(pickedUpPackageIds);
int pickedUpPackageId =  _packageService.GetAll()
    .Where(package => package.Status == "Picked-up")
    .Select(package => package.Id)
    .FirstOrDefault(); // or SingleOrDefault

shipmentItem.PackageId = Convert.ToInt32(pickedUpPackage.Id);