【问题标题】:Linq where a record contains 2 matched fields一条记录包含 2 个匹配字段的 Linq
【发布时间】:2014-12-23 08:55:05
【问题描述】:

我正在使用我无法控制的设计的现有数据库,我正在使用 EF4,并使用 LINQ 进行查询。我在 VB.Net 工作,但很乐意翻译 c# 解决方案。

我想从一个表中提取记录,其中两个字段与列表中的一对项目匹配。

所以我有一个列表

Public Class RequestInfo
    Public Property INSP_ROUTINE_NM As String
    Public Property FEATURE_ID As String
End Class

我想查询一个表并提取所有 INSP_ROUTINE_NM 和 FEATURE_ID 都与请求信息项之一匹配的记录。

我可以在任何一个字段中轻松使用 contains

 Dim Features = (From F In MLDb.TBL_FeatureInfoSet _
      Where (C_Request.Select(Function(x) x.INSP_ROUTINE_NM)).Contains(F.INSP_ROUTINE_NM) Select F.FEATURE_ID, F.FEATURE_RUN_NO, F.INSP_ROUTINE_NM).ToList

我可以使用两个 contains 调用,但这会提取两个记录在列表中某处匹配的任何记录,而不一定是请求中的任何一对。

【问题讨论】:

    标签: vb.net linq linq-to-entities


    【解决方案1】:

    你可以试试这个:

    C#

    var Features= (from f in MLDb.TBL_FeatureInfoSet
                  let q = C_Request.Select(x=>x.INSP_ROUTINE_NM)
                  where q.Contains(f.INSP_ROUTINE_NM) || q.Contains(f.INSP_ROUTINE_NM)
                  // where q.Contains(f.INSP_ROUTINE_NM) && q.Contains(f.INSP_ROUTINE_NM)
                  select new {f.FEATURE_ID, f.FEATURE_RUN_NO}).ToList();
    

    【讨论】:

    • 你的解决方案没问题。我还建议在尝试匹配字符串的任何地方使用 .ToUpper() 或 .ToLower() 。
    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多