【问题标题】:Linq join list and tableLinq 连接列表和表
【发布时间】:2017-12-04 14:17:58
【问题描述】:

我有一个List<string> of ProductTypes,例如Vegetables, Dairy, Meat 我从 Asp.Net Core 中的查询字符串收到的。

在数据库中,有一个 Product 表,其中包含一个 ProductType 列,该列在文本字段中包含每个产品的类型)

我想从产品数据库表中选择收到的产品类型列表中的所有产品。我这样做了:

var Result =  (from p in _context.Product
             join t in ProductTypes on p.ProductType equals t  select p).ToList();

我上面的努力有一个(不正确的)空结果,除非只传递了一个 ProductType,在这种情况下它可以正常工作。

如果传递了多个 ProductType,我如何才能完成正确的结果集?

【问题讨论】:

  • @MethodMan 我的语法与您说我重复的问题中的答案相同。这里唯一的区别是,因为 t 来自一个列表,而不是数据库,所以我不能使用 t.ProductType,我必须使用 t 本身。

标签: c# linq entity-framework-core


【解决方案1】:

您可以使用Contains 代替连接:

var result =
    from p in _context.Product
    where ProductTypes.Contains(p.ProductType)
    select p;

您很少需要在 LINQ 中进行连接,并且在您有内存列表和数据库表的特殊情况下,Contains 是可行的方法。

【讨论】:

  • 谢谢,这很有帮助,而且感觉不那么尴尬。但它仍然只有在只传递一个 ProductType 时才有效。
  • 我用过无数次这样的包含,它总是有效的。您确定错误不在其他地方吗?您可以使用ToString 从 LINQ 查询中获取 SQL 查询,并直接在 DB 上尝试。
  • @jdoer1997:如果您的ProductTypesList<string>,则提到的代码应该可以工作。但是,如果 ProductTypes 是 csv,那么您必须使用 ProductTypes.Split(',')
  • Sefe 你是对的,正如@Vandita 指出的那样,我的输入实际上是 csv
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 2020-10-17
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 2015-12-07
相关资源
最近更新 更多