Я могу отфильтровать данные со следующими двумя параметрами id1 и id2 и получить точный результат из 10 записей, из которых 9 с ценой_type = cs и другими с price-type = ms.Как фильтровать запрос linq
Однако, если добавить price_type в параметры id1 и id2 (ID1 = 23456,567890 & id2 = 6782345 & price_type = мс), я получаю 3000 записей вместо получения одной записи.
Я что-то пропустил в коде. Любая помощь будет очень высоко ценится.
var data = db.database_BWICs.AsQueryable();
var filteredData = new List<IQueryable<database_Data>>();
if (!string.IsNullOrEmpty(query.name))
{
var ids = query.name.Split(',');
foreach (string i in ids)
{
filteredData.Add(data.Where(c => c.Name != null && c.Name.Contains(i)));
}
}
if (!string.IsNullOrEmpty(query.id2))
{
var ids = query.id2.Split(',');
foreach (string i in ids)
{
filteredData.Add(data.Where(c => c.ID2!= null && c.ID2.Contains(i)));
}
}
if (!string.IsNullOrEmpty(query.id1))
{
var ids = query.id1.Split(',');
foreach (string i in ids)
{
filteredData.Add(data.Where(c => c.ID1!= null && c.ID1.Contains(i)));
}
}
if (query.price_type != null)
{
var ids = query.price_type.Split(',');
foreach (string i in ids)
{
filteredData.Add(data.Where(c => c.Type.Contains(i)));
}
}
if (filteredData.Count != 0)
{
data = filteredData.Aggregate(Queryable.Union);
}
Обновленный код:
var data = db.database_BWICs.AsQueryable();
if (!string.IsNullOrEmpty(query.name))
{
var ids = query.name.Split(',');
data = data.Where(c => c.Name != null && ids.Contains(c.Name));
}
if (query.price_type != null)
{
var ids = query.price_type.Split(',');
data = data.Where(c => ids.Contains(c.Cover));
}
if (!String.IsNullOrEmpty(query.id1))
{
var ids = query.id1.Split(',');
data = data.Where(c => c.ID1!= null && ids.Contains(c.ID1));
}
Какие результаты вы получите, если вы самостоятельно запускаете отдельные запросы для параметров 'id1' и' id2'? –
Привет, Спасибо за ваш ответ. Я получаю правильные записи данных, когда я запускаю запросы id1 и id2 отдельно. Например (api/test? Id1 = 5683028) (api/test? Id2 = 7982377). – user3070072