【问题标题】:Cannot use IEnumerable<string> in predicate [duplicate]不能在谓词中使用 IEnumerable<string> [重复]
【发布时间】:2013-04-02 11:29:35
【问题描述】:

我有以下代码...

examinerSpec.Predicate = examinerSpec.AndExpression(examinerSpec.Predicate,
     centreTemp =>centreTemp.ExaminerCentreAssociations.Any(
     examinerTemp =>examinerTemp.CentreRegionMaps.CentreNumber.
     Contains(**currentCentreNumber**) &&
     examinerTemp.CentreRegionMaps.Active == true &&
     examinerTemp.DateStart <= DateTime.Now &&
     (!examinerTemp.DateEnd.HasValue ||
     examinerTemp.DateEnd.Value >= DateTime.Now)));

Contains(currentCentreNumber) 中的CurrentCentreNumber 是一个字符串。我想使用 centerNumbers 的 IEnumerable。我尝试了以下...

examinerSpec.Predicate = examinerSpec.AndExpression(examinerSpec.Predicate,
   centreTemp =>
   centreTemp.ExaminerCentreAssociations.Any(
   examinerTemp =>
   examinerTemp.CentreRegionMaps.CentreNumber.
   Any(currentCentreNumber) &&
   examinerTemp.CentreRegionMaps.Active == true &&
   examinerTemp.DateStart <= DateTime.Now &&
   (!examinerTemp.DateEnd.HasValue ||
   examinerTemp.DateEnd.Value >= DateTime.Now)));

这行不通。编译器告诉我“无法推断方法的类型参数”。

我真的需要在 IEnumerable 参数上过滤 ExamerTemp.CentreRegionMaps.CentreNumber。

非常感谢您的帮助。

【问题讨论】:

  • 您在寻找类似于“IN”功能的东西吗? stackoverflow.com/questions/959752/where-in-clause-in-linq
  • 嗯,是的,但我不知道如何将它集成到示例中的谓词代码中。
  • 你必须扭转它们。你必须说listOfCurrentCenterNumbers.Contains(examinerTemp.CentreRegionMaps.CentreNumber);
  • 谢谢罗伯特,但我已经尝试过了。我收到以下错误:“LINQ to Entities 无法识别方法 'Boolean Contains(System.String)' 方法,并且此方法无法转换为存储表达式。”

标签: c# linq contains any


【解决方案1】:

这行得通吗?很难推断你的类型...

examinerSpec.Predicate = examinerSpec.AndExpression
    (examinerSpec.Predicate,
        centreTemp =>
            centreTemp.ExaminerCentreAssociations.Any(examinerTemp =>
                examinerTemp.CentreRegionMaps.CentreNumber.Any(cn => cn == currentCentreNumber) &&
                examinerTemp.CentreRegionMaps.Active == true &&
                examinerTemp.DateStart <= DateTime.Now &&
                (!examinerTemp.DateEnd.HasValue || examinerTemp.DateEnd.Value >= DateTime.Now)
            )
    );

【讨论】:

  • 谢谢,但这给出了错误:在以下语句 cn => cn == currentCentreNumber 上无法将 '==' 运算符应用于 char 和 System.Collections.ObjectModel.Collection 类型的操作数.它认为 cn 是 char 类型!
  • 什么是 CentreNumber?一个字符串?
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 2018-04-15
  • 2017-12-31
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多