【发布时间】:2013-03-16 00:17:24
【问题描述】:
在 C# 的动态 linq 中执行具有“包含”关键字的查询时,我遇到了一些问题。我收到以下错误
“Int32”类型中不存在属性或字段
我的代码如下:
如果我为数据类型字符串字段使用“包含”关键字,那么它可以正常工作,如下所示
string[] CandidateNamesArray = new string[]{"Ram", "Venkat", "Micheal"}
var dynamicLinqQuery = Candidates.Where("CandidateName.Contains(@0)", CandidateNamesArray );
- 工作正常
但如果我对数据类型 int 字段使用“包含”关键字,则会引发如下异常
int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = Candidates.Where("CandidateId.Contains(@0)", CandidateIdsArray);
运行时异常 - “类型中不存在适用的方法‘包含’ 'Int32'"
还尝试了以下另一种方式
int[] CandidateIdsArray = new int[]{4, 78, 101}
var dynamicLinqQuery = Candidates.Where("@0.Contains(CandidateId)", CandidateIdsArray);
运行时异常 - “类型中不存在属性或字段‘CandidateId’ 'Int32'"
我花了将近 2 天的时间来解决上述问题,但未能成功。任何人都可以帮我解决上述问题...在此先感谢
【问题讨论】:
-
错误非常清楚地说明了问题。
String有一个名为Contains的方法,它检查字符串是否包含您指定给该方法的字符序列。Int32没有名为Contains的方法,这样的方法会做什么?那是你的第一个错误。在第二个中,您在int[]上尝试Contains方法。没有这样的方法(有一个扩展方法)。试试List<int>看看你是否有更好的运气。 -
看起来您的第三个示例应该可以工作。你确定你有
Candidates.Where(...)而不是CandidateIdsArray.Where(...)吗? -
@venkat,你试过
List<int>吗? -
我已尝试使用 List
,但以相同的异常“Int32 类型中不存在属性或字段 'CandidateId'”结束。在第三个示例中,它是 CandidateIdsArray.Where(...) -
等等,如果在第三个样本中你有
CandidateIdsArray.Where(...),那就是问题所在!把Candidate.Where(...)放在那里。