В моем основном проекте ASP.NET у меня есть скидка , в которой хранятся связанные идентификаторы продукта как | -Separated Huding Strings. Я разделил эти идентификаторы и пытаюсь получить связанные продукты из таблицы продукта .
Вот мой код:
public List GetRelatedProducts(List ids, string lang = "en")
{
List result = new List();
try
{
using (AppDbContext db = new AppDbContextFactory().CreateDbContext())
{
var relatedIds = ids
.Where(x => Guid.TryParse(x, out _))
.Select(Guid.Parse)
.ToList();
result = db.product
.Include(p => p.ProductLangs)
.Include(p => p.ProductPrices)
.Include(p => p.Images)
.Where(p => relatedIds.Contains(p.ID)) // p.ID is Guid
.ToList();
foreach (var p in result)
{
p.ProductLangs = p.ProductLangs
.Where(l => l.LangCode == lang)
.ToList();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return result;
}
< /code>
Когда я отлаживает: < /p>
ids → ["31fcd135-4ea9-469d-8b73-08dc6f3f37a4","e362bed1-deb1-46bd-e6a7-08dc99bb5b87"]
relatedIds → [31fcd135-4ea9-469d-8b73-08dc6f3f37a4, e362bed1-deb1-46bd-e6a7-08dc99bb5b87]
< /code>
Таким образом, список guid действителен.SELECT *
FROM Product
WHERE ID IN ('31fcd135-4ea9-469d-8b73-08dc6f3f37a4', 'e362bed1-deb1-46bd-e6a7-08dc99bb5b87');
< /code>
Но EF Core запрос всегда возвращает 0 результатов. < /p>
Мой вопрос: < /p>
Почему ядро EF Core с < /p>
.Where(p => relatedIds.Contains(p.ID))
не возвращайте строки, в то время как запуск одних и тех же идентификаторов непосредственно в SQL возвращает ожидаемые продукты?
В моем основном проекте ASP.NET у меня есть скидка , в которой хранятся связанные идентификаторы продукта как | -Separated Huding Strings. Я разделил эти идентификаторы и пытаюсь получить связанные продукты из таблицы продукта . Вот мой код: [code]public List GetRelatedProducts(List ids, string lang = "en") { List result = new List();
try { using (AppDbContext db = new AppDbContextFactory().CreateDbContext()) { var relatedIds = ids .Where(x => Guid.TryParse(x, out _)) .Select(Guid.Parse) .ToList();
result = db.product .Include(p => p.ProductLangs) .Include(p => p.ProductPrices) .Include(p => p.Images) .Where(p => relatedIds.Contains(p.ID)) // p.ID is Guid .ToList();
foreach (var p in result) { p.ProductLangs = p.ProductLangs .Where(l => l.LangCode == lang) .ToList(); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return result; } < /code> Когда я отлаживает: < /p> ids → ["31fcd135-4ea9-469d-8b73-08dc6f3f37a4","e362bed1-deb1-46bd-e6a7-08dc99bb5b87"]
relatedIds → [31fcd135-4ea9-469d-8b73-08dc6f3f37a4, e362bed1-deb1-46bd-e6a7-08dc99bb5b87] < /code> Таким образом, список guid действителен.SELECT * FROM Product WHERE ID IN ('31fcd135-4ea9-469d-8b73-08dc6f3f37a4', 'e362bed1-deb1-46bd-e6a7-08dc99bb5b87'); < /code> Но EF Core запрос всегда возвращает 0 результатов. < /p> Мой вопрос: < /p> Почему ядро EF Core с < /p> .Where(p => relatedIds.Contains(p.ID)) [/code] не возвращайте строки, в то время как запуск одних и тех же идентификаторов непосредственно в SQL возвращает ожидаемые продукты?