使用实体框架搜索以逗号分隔的值

时间:2020-03-19 09:43:35

标签: c# asp.net asp.net-mvc entity-framework asp.net-core

我有以下字符串 3,9 ,我想在其中查找以下数据库表中的2个值(3和9)

enter image description here

因此,如果我的字符串仅包含数字3,则我的查询应该返回所有5行,如果我发送的数字9,它应该仅返回2行,如果我发送3,9,它也应该返回所有5行

我在课堂上编写代码遇到困难

<Response>
...
</Response>

感谢任何帮助

4 个答案:

答案 0 :(得分:0)

我想t = GetAll()是一个带有行的列表。

因此,您必须以与拆分t.AproversIds参数相同的方式拆分每个ApproversId列值,并检查是否存在任何交集

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

答案 1 :(得分:0)

我不知所措,我们如何搜索多个值并提出了这个建议。 :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();

让我知道是否有帮助

答案 2 :(得分:0)

如果使用SQL Server,则可以使用SqlMethods.Like将数据库结果集过滤为可管理的数据子集,然后可以使用RegEx提取内存中的项目。

答案 3 :(得分:0)

这是您可以参考的有效演示

 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

相关问题