我想要完成的事情。我有一个包含产品的表,一个包含选项的表,以及一个包含productoptions的表。
我要做的是基于可变的选项数组来提取产品,我想只返回与这些选项匹配的产品。请记住,它可能与产品的所有可用选项都不匹配。
Any()
似乎有效,但它会返回与单个选项匹配的所有产品,例如灰色或方形,而不是灰色和方形。
All()
似乎才有效。
Contains()
生成与Any()
相同的内容。
下面是我想要完成的,如果我手动输入id,这可行,但我有一个这些选项id的数组(和大小更改),我似乎无法弄清楚如何用数组制作它。
var newproducts = (from prod in products
where prod.optionids.Any(o => o == 1) &&
prod.optionids.Any(o => o == 6) &&
prod.optionids.Any(o => o == 4)
select prod);
请帮助,我似乎无法找到另一个答案。
答案 0 :(得分:1)
foreach和每个产品验证它是否具有预期的选项......
var products = new[]{
new {id=1, optionIds = new []{1, 2, 3, 4, 5}},
new {id=2, optionIds = new []{1, 2, 3, 4}},
new {id=3, optionIds = new []{1, 2, 3}},
new {id=4, optionIds = new []{1, 2}},
};
var options = new []{4, 5};
var matchAny = from prod in products
let found = (from id in prod.optionIds
join option in options
on id equals option
select id).Any()
where found
select prod;
output
1 2 3 4 5
1 2 3 4
var matchAll = from prod in products
let found = options.All(p=>prod.optionIds.Contains(p))
where found
select prod;
output
1 2 3 4 5
修改强>
如果您正在关注方面,可能需要反转查询,枚举所有选项并投影相应的计数器和相关产品
var query = from option in options
let match = from product in products
where product.optionIds.Contains(option)
select product
select new
{
Option = option,
Counter = match.Count(),
Products = match.Select(p=>p.id)
};
Option Counter Products
4 2 1
2
5 1 1
答案 1 :(得分:1)
试试这个:
my $height = system("identify -format %h $curPic");
my $width = system("identify -format %w $curPic");