Поиск значения через запятую с использованием Entity Framework - PullRequest
0 голосов
/ 19 марта 2020

У меня есть следующая строка 3,9 , где я хочу найти 2 значения (3 и 9) в таблице базы данных, которая выглядит следующим образом:

enter image description here

, поэтому, если моя строка будет содержать только число 3, мой запрос должен вернуть все 5 строк, если я отправил число 9, он должен вернуть только 2 строки, а если я отправлю 3,9, он также должен вернуть все 5 строк

У меня проблемы с написанием кода в моем классе

var t = GetAll()
 if (!string.IsNullOrEmpty(ApproversId))
        {
            List<string> ApproversIdL = ApproversId.Split(',').ToList();
            // this is where i am having trouble
            t = t.Where(s => s.AproversIds.Any(x=>x.ToString()== ApproversIdL.Any(x=>x.ToString())));                                
        }

Благодарим за любую помощь

Ответы [ 4 ]

0 голосов
/ 20 марта 2020

Вот рабочая демонстрация, к которой можно обратиться

 public async Task<IActionResult>  Test()
    {
        var ApproversId = "3,9";
        var t = (from a in _context.Answers
                select a).ToList();
        if (!string.IsNullOrEmpty(ApproversId))
        {
            List<string> ApproversIdL = ApproversId.Split(',').ToList();
            t = t.Where(s => ApproversIdL.Any(al=>s.AproversIds.Contains(al))).ToList();

        }
        return View();
    }

Результат: enter image description here

0 голосов
/ 19 марта 2020

Я бился по кустам о том, как мы можем искать несколько значений, и придумал это. : P

Dictionary<int, string> data = new Dictionary<int, string>();
data.Add(1, "3,97");
data.Add(2, "9,3");
data.Add(3, "3");
data.Add(4, "3");
data.Add(5, "3,4");

//search string with comma separated value
string searchItems = "9";
var tempSearchItems = searchItems;

searchItems = searchItems.Replace(",", "|").Replace(" ", "");

//Pattern for the regex
string pattern = @"\b(" + searchItems + @")\b";

//get the result
var test = data.Where(d => Regex.Matches(d.Value, pattern).Count > 0).ToList();

Дайте мне знать, если это поможет

0 голосов
/ 19 марта 2020

Если вы используете SQL Сервер, то вы можете использовать SqlMethods.Like , чтобы отфильтровать набор данных базы данных в управляемое подмножество данных, которые затем могут быть извлечены элементы в памяти с помощью RegEx.

0 голосов
/ 19 марта 2020

Полагаю, что t = GetAll() - это список со строками.

Таким образом, вам нужно разделить каждое значение столбца t.AproversIds так же, как вы разбили параметр ApproversId, и проверьте, есть ли пересечение

var ApproversIdL = ApproversId.Split(',');
t = t.Where(s => s.AproversIds.Split(',').Any(p => ApproversIdL.Contains(p) ));
...