【问题标题】:LINQ select where EF Navigation property value in arrayLINQ 选择数组中 EF 导航属性值的位置
【发布时间】:2016-06-30 14:36:04
【问题描述】:

我有一个用于搜索名为“Patients”的 EF 对象的 Web API 方法。患者有一个名为 Referrals 的导航属性(一个患者可以有多个转介),每个 Referral 都有一个名为“ConsultantID”的整数属性。

我想返回所有有转诊的患者,其 ConsultantID 值在名为“顾问”的定义数组内,但我无法理解所需的逻辑。我目前有以下内容,但它没有像我预期的那样工作,推荐人。任何调用似乎都在执行“存在”调用,而不是我期望的加入行为。

public List<HelperCode.DTO.SearchResult> SearchPatients(string firstname, string surname, [FromUri] int[] consultants)
        {
            IQueryable<Patient> results = db.Patients;

            List<HelperCode.DTO.SearchResult> output = new List<HelperCode.DTO.SearchResult>();

            List<int> inputConsultants = consultants.OfType<int>().ToList();


            if (!String.IsNullOrEmpty(firstname)) { results = db.Patients.Where(c => c.FirstName.ToLower().Contains(firstname.ToLower())); }
            if (!String.IsNullOrEmpty(surname)) { results = results.Where(c => c.Surname.ToLower().Contains(surname.ToLower())); }


            if (consultants.Length > 0) { 
                results = results.Where(c => c.Referrals.Any(r => inputConsultants.Contains(r.ConsultantID ?? default(int)))); 
            }


            results = results.OrderBy(i => i.Surname);

            foreach (Patient p in results) {
                output.Add(new HelperCode.DTO.SearchResult(p));
            }

            return output;
        }

【问题讨论】:

  • 这行consultants.OfType&lt;int&gt;().ToList()的目的是什么?
  • 为什么要关心 SQL 查询是使用EXISTS 还是JOIN?你得到正确的结果吗?如果有,有什么问题?
  • @Ric 纯粹是把consults数组转换成一个列表,方便以后调用.Contains方法。
  • 但是你采用一个 int 数组,过滤元素只返回 int,然后调用 ToList()....
  • @IvanStoev 我不在乎。它似乎限制了结果集。如果我将数组中的单个顾问 ID 值传递给它,它会返回 220 个结果,但如果我传入相同的 ID 和另一个 3 个顾问 ID,它只返回 28 - 我希望它返回任何具有顾问 ID 的推荐结果数组,所以会期望更多而不是更少的结果。

标签: c# entity-framework linq navigation-properties


【解决方案1】:

开发人员是一个工具,代码工作正常,但输入值不正确。希望对以后的人有用。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多