【问题标题】:How to combine a query of the LINQ and a list? [duplicate]如何结合 LINQ 的查询和列表? [复制]
【发布时间】:2018-06-10 14:19:34
【问题描述】:

[如有重复请见谅] 我找不到合适的解决方案,所以我决定问一个问题。

我有一个对象companies,它返回元素列表。

我想编写一个查询,它将选择我们列表中的所有CompanyId。我不想使用FirstOrDefault() 只选择一条记录。

示例:

var companiesSummary = _context.Company
                       .Where(c => c.CompanyId == companies.Select(cs => cs.ID))
                       .Include(country => country.Country)                   

我该如何应对?你有什么想法吗?

【问题讨论】:

  • 你试过反过来吗?例如。; from c in companies... etc.?
  • 您要查询idcompanies.Select(cs => cs.ID) 中的所有公司吗?
  • 谢谢大家的回答。 @Stefan 在我的情况下它不会给出预期的结果。
  • 是的@Aominè,他们都是。

标签: c# sql linq


【解决方案1】:

从内存列表中选择公司的 ID,然后将其传递给 where 方法中的查询:

var ids = companies.Select(cs => cs.ID).ToList();
var companiesSummary = 
    _context.Company
    .Where(c => ids.contains(c.ID))
    .Include(country => country.Country)

【讨论】:

  • 我试图找到我应该如何解决它,但没有预期的结果。这就是我要找的,谢谢。 :-)
【解决方案2】:

假设您的companies 包含一个具有ID 属性的对象列表,您希望将其与Company.CompanyId 进行比较,您的查询应该如下所示

int[] ids = companies.Select(cs => cs.ID).ToArray();
var companiesSummary = _context.Company
    .Where(c => ids.Contains(c.CompanyId))
    .Include(company => company.Country);

【讨论】:

    【解决方案3】:
    var matchingCompanies = companies.Where(c => companyIds.Contains(c.Id))
    

    companyIds 设为HashSet<T> 以获得高效的Contains

    【讨论】:

    • “将 companyIds 设为 HashSet 以实现高效的 Contains。”,为什么?这将被翻译成SQL,它绝对没有区别companyIds的类型是什么
    • 问题并没有说会转成SQL,但是感谢投反对票
    • Include的使用显然来自Entity Framework,就像_context.Company的使用一样。
    • 问题中没有提到实体Framework,而context是一个很常见的变量名。
    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多