Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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# 集合上的Linq join集合_C#_Linq - Fatal编程技术网

C# 集合上的Linq join集合

C# 集合上的Linq join集合,c#,linq,C#,Linq,Series对象包含一个名为SKU的属性,它是IEnumerable 如果此sku在允许的sku列表中,则我需要该系列 在我下面的例子中,我加入了s.SeriesId,这是不正确的。 我认为应该是s.SKU系列 我只想返回集合中包含sku的系列 IEnumerable<Data.Models.Series> series = await _seriesRepository.GetSeriesAsync(Properties.Settings.Default.Chann

Series对象包含一个名为SKU的属性,它是IEnumerable 如果此sku在允许的sku列表中,则我需要该系列

在我下面的例子中,我加入了s.SeriesId,这是不正确的。 我认为应该是s.SKU系列 我只想返回集合中包含sku的系列

        IEnumerable<Data.Models.Series> series = await _seriesRepository.GetSeriesAsync(Properties.Settings.Default.Channel, page, limit);
        string[] skusInSeries = series?.SelectMany(x => x.Skus).Distinct().ToArray();

        IEnumerable<string> itemNumbers = GetAllowedSkus(Customer, Shipto, EnvironmentCode, AcceptLanguage, skusInSeries, Warehouse);


        var selected = from s in series
                       join i in itemNumbers
                       on s.SeriesId equals i     //s.Skus  IEnumerable<string>
                       select s;
IEnumerable series=wait _seriesRepository.GetSeriesAsync(Properties.Settings.Default.Channel,page,limit);
字符串[]skusInSeries=series?.SelectMany(x=>x.Skus).Distinct().ToArray();
IEnumerable itemNumber=GetAllowedSKU(客户、发货人、环境代码、接受语言、skusInSeries、仓库);
所选变量=从系列中的s
加入我的行列
关于s.SeriesId等于i//s.Skus IEnumerable
选择s;
或者另一种方式:

var selected = from s in series
               where s.Skus.Any(sku => itemNumbers.Contains(sku))
               select s;
我猜通常情况下,
sku
itemNumbers
更多,而且第一选择更好。最好将
itemNumbers
更改为可以传递到数据库的列表:

var itemNumbers = GetAllowedSkus(Customer, Shipto, EnvironmentCode, AcceptLanguage, skusInSeries, Warehouse).ToList();
var selected = from s in series
               where itemNumbers.Any(i => s.Skus.Contains(i))
               select s;
如果不涉及SQL(或其他)数据库,您可以将
itemNumbers
转换为
HashSet
,以便高效查找:

var itemNumbers = new HashSet<string>(GetAllowedSkus(Customer, Shipto, EnvironmentCode, AcceptLanguage, skusInSeries, Warehouse));

var selected = from s in series
               where s.Skus.Any(sku => itemNumbers.Contains(sku))
               select s;
var itemNumbers=新哈希集(getAllowedSKU(客户、发货人、环境代码、接受语言、skusInSeries、仓库));
所选变量=从系列中的s
其中s.sku.Any(sku=>ItemNumber.Contains(sku))
选择s;

谢谢您的回复。成功了。我同意你的涉及哈希集的解决方案。没有使用数据库。我将查找HashSet并进一步了解它。
var itemNumbers = new HashSet<string>(GetAllowedSkus(Customer, Shipto, EnvironmentCode, AcceptLanguage, skusInSeries, Warehouse));

var selected = from s in series
               where s.Skus.Any(sku => itemNumbers.Contains(sku))
               select s;