У меня есть такая структура классов фильтров
public class SchemeInvestorDataDateFilter
{
public int SchemeId { get; set; }
public int InvestorId { get; set; }
public DateTime Date { get; set; }
}
Я передаю список этого объекта фильтра, чтобы получить данные из базы данных с помощью linq, вот так
var schemeIds = filters.Select(x => x.SchemeId);
var investorIds = filters.Select(x => x.InvestorId);
var dates = filters.Select(x => x.Date);
var query = Context.SchemeInvestorDataDates
.Where(x =>
schemeIds.Contains(x.SchemeInvestor.SchemeId) &&
investorIds.Contains(x.SchemeInvestor.InvestorId) &&
dates.Contains(x.Date) &&
!x.IsDeleted
);
Все работает нормально, но это неправильный способ сделать то, что я хочу.
Я хочу, чтобы он фильтровал строки для комбинация идентификатора схемы + идентификатор инвестора + дата
Поэтому, по сути, он должен возвращать строки, которые соответствуют этой комбинации.
В настоящее время он возвращает строки всех комбинаций перестановок переданного идентификатора схемы, идентификатора инвестора и даты.
Это работает, потому что возвращает все записи, которые соответствуют моему условию, но это неправильный путь, потому что он возвращает некоторые дополнительные строки а также то, что мне не нужно.
Но я не уверен, как я могу написать запрос в ссылке, который проверяет эту комбинацию списка фильтров в памяти для каждого объекта БД.Я знаю, как это сделать с помощью Dapper, но ищу способ с помощью linq.
Существует ли такой способ?
РЕДАКТИРОВАТЬ
Вот как этого можно добиться с помощью dapper. (Случай аналогичный приведенному выше)
StringBuilder query = new StringBuilder("select * from schemeinvestors si join (");
for (int i = 0; i < schemeInvestorIds.Count(); i++)
{
var data = schemeInvestorIds.ElementAt(i);
query.Append($"select {data.investorId} as InvestorId, {data.schemeId} as SchemeId");
query.Append(schemeInvestorIds.Count() - 1 == i ? "" : " union ");
}
query.Append(") x on si.InvestorId=x.InvestorId and si.SchemeId=x.SchemeId");
using (var connection = BuildConnection())
{
connection.Open();
return await connection.QueryAsync(query.ToString());
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... ject-array