【问题标题】:Using LINQ to search relational databases使用 LINQ 搜索关系数据库
【发布时间】:2016-01-22 13:44:03
【问题描述】:

我有以下数据库:

以及以下代码:

public IActionResult Index(IssueModel searchCriteria)
{
    var bloods = from m in _context.Blood
                 select m;
    if (!string.IsNullOrEmpty(searchCriteria.SearchComponent))
    {
        //Blood Component
        bloods = bloods.Where(s => s.Component.Contains(searchCriteria.SearchComponent));
        //Blood Type : This is where I plan to search for a specific blood type.
    }
    return View(bloods);
}

如您所见,我很高兴在血液数据库中搜索某种成分类型。在我标记的区域中,我想搜索与某个 PlasType 或 RedBloodType 相关的血液。

有什么想法吗?谢谢!

编辑:感谢所有提供答案的人。我看过的所有答案都非常有用,不仅可以帮助我破解这个问题,还可以提高我对该主题的理解。

【问题讨论】:

  • 您的return 语句忽略bloods 的事实无济于事......但此外,您还没有真正提出问题。你到底在坚持什么?
  • 您可以继续查询。给定blood.DonorId,您可以找到与您的PlasmaTypeRedBloodType 标准匹配的Donor。然后,返回查询的结果,而不是原来的_context.Blood.List

标签: c# sql asp.net-mvc linq relational-database


【解决方案1】:

我只会创建简单的 sql 查询,然后将其转换为 linq 查询。

Select distinct blood.* from blood
inner join donor on blood.donorid = donor.donorid
where donor.PlasType like 'param' or RedBloodType like 'param'

现在将其转换为 linq 查询

var filteredBlood = (from b in blood
                      join d in donor on b.DonorId equals d.DonorId
                      where d.PlasType.contains("param") || d.RedBloodType.contains("param")
                      select b).distinct().toList();

【讨论】:

    【解决方案2】:

    你没有像Blood.Donors 这样的导航属性(如果它是一对多关系)?您可以通过此属性访问它,但之前您应该包含它:

    Blood.Include(c => c.Donors);
    

    【讨论】:

      【解决方案3】:

      像这样:???

          result = new List<Blood>();
      
          foreach (var b in bloods)
          {
            if (_context.Donor.Where(d => d.id == b.BloodId)
                              .Any(d => (d.PlasType == "somethingsYouNow") || (d.RedBloodType == "somethingsYouNow"))
            {
              result.Add(b)
            }
          }
      
      
          return result;
      

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多