从表中检索所有项目,其中表列的文本包含在项目列表中

我有一个名为策略的表,其中包含许多应对策略:


[

    {

        "id": 6,

        "title": "Coping with Depression",

        "description": "A coping strategy for depression.  A description of the coping strategy. \r\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",

        "topic": "depression"

    },

    {

        "id": 18,

        "title": "Coping with Stress",

        "description": "A coping strategy for stress. A description of the coping strategy. \r\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",

        "topic": "stress"

    }

]

该表中的一列称为“主题”,可以包含多个主题字符串,例如“压力抑郁”等。上面的示例数据说明了可行的场景,其中“主题”列中只有一个主题字符串。


我的代码如下:


var listOfTerms = new List<string>() { "stress", "depression" };


var strategies = _context.Strategies

      .Where(strategy => listOfTerms.Any(t => t.Equals(strategy.Topic)))

      .ToListAsync();

我也尝试过:


var strategies = _context.Strategies

   .Where(strategy => listOfTerms.Any(t => t.ToLower().Contains(strategy.Topic.ToLower())))

   .ToListAsync();

这段代码适用于上面所示的场景,即 Topic 列中只有一个 Topic 字符串。


如果我将主题字符串“stress”添加到场景 id = 6 的主题列中,那么该行将不会返回到策略列表中。


因此,总之,我想从 _context.Strategies 表中检索所有项目,其中strategy.Topic列的文本包含在listOfTerms中项目的文本中,如果strategy.Topic列的文本可以包含多个项目一个主题字符串。


任何帮助将不胜感激。


哈士奇WWW
浏览 59回答 1
1回答

猛跑小猪

好吧,我想我终于明白你的问题了。鉴于:class&nbsp;Problem{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;topic&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} }如果我这样设置:List<Problem>&nbsp;problems&nbsp;=&nbsp;new&nbsp;List<Problem>(); problems.Add(new&nbsp;Problem&nbsp;{&nbsp;topic&nbsp;=&nbsp;"stress"&nbsp;}); problems.Add(new&nbsp;Problem&nbsp;{&nbsp;topic&nbsp;=&nbsp;"depression"&nbsp;}); problems.Add(new&nbsp;Problem&nbsp;{&nbsp;topic&nbsp;=&nbsp;"stress,&nbsp;depression"&nbsp;});然后创建一个术语列表:var&nbsp;listOfTerms&nbsp;=&nbsp;new&nbsp;List<string>()&nbsp;{&nbsp;"stress",&nbsp;"depression"&nbsp;};然后我可以得到你想要的结果:var&nbsp;result&nbsp;=&nbsp;problems.Where(item&nbsp;=>&nbsp;listOfTerms.Any(term&nbsp;=>&nbsp;item.topic.Contains(term))).ToList();该 linq 语句让我回到了所有三个“问题”。
打开App,查看更多内容
随时随地看视频慕课网APP