Таблица книг
Id VendorId ASIN Price
-- -------- ---- ------
1 gold123 123 10
2 sil123 123 11
3 gold456 456 15
4 gold678 678 12
5 sil456 456 12
6 gold980 980 12
Я хочу написать запрос linq, который будет возвращать мне строки, для которых соответствует каждый золото , если sil идентификатор поставщика не существует,Последние три цифры идентификатора поставщика соответствуют столбцу ASIN в этой строке.
Например, для золота123 существует соответствующий sil123, так что строка не будет возвращена, а для золота 678 и золота980 соответствующий sil не существует.Таким образом, эти строки будут возвращены.
Я попытался выполнить следующие действия:
var gold = _repository.Query<Books>().Where(x =>
x.VendorId.Contains("gold"))
.OrderBy(x => x.Id).Skip(0).Take(500).ToList();
var asinsForGold = gold.Select(x => x.ASIN).ToList();
var correspondingSilver = _repository.Query<Books>().Where(x =>
x.VendorId.Contains("sil")
&& asinsForGold.Contains(x.ASIN)).ToList();
var correspondingSilverAsins = correspondingSilver.Select(x => x.ASIN).ToList();
var goldWithoutCorrespondingSilver = gold.Where(x =>
!correspondingSilverAsins.Contains(x.ASIN));
Можем ли мы применить самосоединение или лучший способ получить результат только в одном запросе вместо двух запросов и нескольких других операторов списка.