- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个每小时运行一次的 PowerShell 脚本,它基本上通过滴灌过程更新产品信息。该脚本在开发环境中失败,但在生产和质量中继续工作。故障点在使用 LINQ 的线路上。这是脚本:
$productInfos = [pscustomobject]@{
product_name = 'Television'
price = 1000
product_id = 101
} | ForEach-Object{$_}
$productIdDelegate = [Func[object,int]] {$args[0].product_id}
$productInfos = [Linq.Enumerable]::ToLookup($productInfos, $productIdDelegate)
从技术上讲,它在最后一行失败了。但是包括倒数第二行是因为在研究这个问题时,我发现很多其他帖子指出如果 ToLookup linq 函数中的两个参数不是同一类型,它可能会导致这个问题。倒数第二行是许多用户的“假定”修复,但遗憾的是不是我自己。我仍然收到
Cannot find an overload for "ToLookup" and the argument count: "2"
我检查了所有 3 个环境的依赖关系,一切都是一样的。而且,powershell 版本也都相同。
最佳答案
即使错误没有提供太多细节,从您当前可重现的代码我们可以看出问题是因为 $productInfos
是类型为 PSObject
的单个对象并且此类未实现 IEnumerable
Interface :
$productInfos = [pscustomobject]@{
product_name = 'Television'
price = 1000
product_id = 101
}
$productInfos -is [System.Collections.IEnumerable] # => False
要确保 $productInfos
始终是一个可编号,您可以使用 Array subexpression operator @( )
:
@($productInfos) -is [System.Collections.IEnumerable] # => True
转换 [object[]]
或 [array]
也应该是一个选项:
[object[]] $productInfos -is [System.Collections.IEnumerable] # => True
[array] $productInfos -is [System.Collections.IEnumerable] # => True
但是上述方法仅在 $productInfos
至少有 1 个元素 时有效,而不是 @(..)
始终确保数组:
The result is always an array of 0 or more objects.
总结:
$productInfos = [Linq.Enumerable]::ToLookup([object[]] $productInfos, $productIdDelegate)
$productInfos = [Linq.Enumerable]::ToLookup(@($productInfos), $productIdDelegate)
$productInfos = [Linq.Enumerable]::ToLookup([array] $productInfos, $productIdDelegate)
是否所有有效选项都考虑了上面的解释,如果我们不确定变量是否将始终被填充,最安全的选择将始终是 @(...)
:
# Returns Null instead of an error:
[Linq.Enumerable]::ToLookup(@(), $productIdDelegate)
关于powershell - 找不到 "ToLookup"和参数计数 : "2" LINQ 的重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72930890/
鉴于此: [ ("A","A122"); ("A","A123"); ("B","B122"); ("B","B123"); ("C","C122"); ] 是
我正在研究将可枚举序列转换为字典类型数据结构的 Enumerable.ToLookup API。可以在此处找到更多详细信息: https://msdn.microsoft.com/en-us/libr
LINQ 提供的 .ToLookup 函数有没有办法要求多个键? 我承认这乍一看似乎不直观,我预计没有实际的方法可以做到这一点,但我希望有人知道方法。 我基本上希望能够通过两个值进行查找,例如 str
考虑到下面的 C# 控制台应用程序代码,使用 我应该如何修改它以替换行: foreach (Product product in productsByCategory[category]) 通过代码行
我有一个如下所示的列表: var products = new List { new Product { Id = 1, Category = "Electronics", Value = 1
var tmpProjection = myCollection.ToLookup(t => t.SomeBoolValue); var listOneFinal = tmpProjection[tr
我正在尝试转 IEnumerable>进入 ILookup使用以下代码: var list = new List>() { new KeyValuePair("London", null),
我有一个巨大的点数据类型列表和一个相等大小的双列表。大小可能在 1000000 左右。两个列表都来自不同的类。 List XYPair; E.g. { (10,10),(10,10).......(
.ToLookup 返回 ILookup . ILookup还实现了接口(interface) IEnumerable> . .GroupBy 返回 IEnumerable> . ILookup 具有
LINQ ToDictionary 和 ToLookup 有什么区别?他们似乎在做同样的事情。 最佳答案 字典是一个 1:1 映射(每个键映射到一个值),并且字典是事后可变(可编辑)的。 查找是一个
我有一个每小时运行一次的 PowerShell 脚本,它基本上通过滴灌过程更新产品信息。该脚本在开发环境中失败,但在生产和质量中继续工作。故障点在使用 LINQ 的线路上。这是脚本: $product
我有以下产品列表 public sealed class Product { public int Id { get; set; } public string Category {
我是一名优秀的程序员,十分优秀!