使用C#中Dynamic Linq中的“Contains”关键字查询数据

我在C#中执行动态linq中包含’Contains’关键字的查询时遇到了一些问题。 我收到以下错误

“Int32”类型中不存在任何属性或字段

我的代码如下:

如果我为数据类型字符串字段使用’Contains’关键字,那么它可以正常工作,如下所示

string[] CandidateNamesArray = new string[]{"Ram", "Venkat", "Micheal"} var dynamicLinqQuery = Candidates.Where("CandidateName.Contains(@0)", CandidateNamesArray ); 
  • 工作良好

但是如果我对数据类型int字段使用’Contains’关键字,那么它会抛出exception,如下所示

 int[] CandidateIdsArray = new int[]{4, 78, 101} var dynamicLinqQuery = Candidates.Where("CandidateId.Contains(@0)", CandidateIdsArray); 

运行时exception – “类型’Int32’中不存在适用的方法’包含’”

也尝试以下面的另一种方式

 int[] CandidateIdsArray = new int[]{4, 78, 101} var dynamicLinqQuery = Candidates.Where("@0.Contains(CandidateId)", CandidateIdsArray); 

运行时exception – “类型’Int32’中不存在属性或字段’CandidateId’”

我花了将近2天的时间来解决上述问题,但未能成功。 任何人都可以帮我解决上述问题……先谢谢

我知道你的post已经很久了,但今天我遇到了同样的问题。

我在Contains的属性之前使用outerIt解决了它。

在你的例子中:

 int[] CandidateIdsArray = new int[]{4, 78, 101} var dynamicLinqQuery = Candidates.Where("@0.Contains(outerIt.CandidateId)", CandidateIdsArray); 

它对我有用,因为DynamicLinq认为CandidateId是数组对象的属性。 并且使用outerIt使它理解它指的是外部迭代器,它是候选者。

您可以使用将数组转换为字符串,然后生成Contains(),而不是将其转换回int

我不知道Dynamic Linq但是对我来说很明显Int32类型不包含任何名为Contains方法。 如何在调用Contains之前将其转换为string

 var dynamicLinqQuery = Candidates.Where("CandidateId.ToString().Contains(@0)", CandidateIdsArray); 

看起来你正在检查错误的东西。 在第一个查询中,您实际检查字段“CandidateName”是否包含另一个字符串,这是有效的。 但在第二个示例中,您检查字段“CandidateId”是否包含另一个int。 并且int不能包含另一个int,因此您会收到错误。

编辑:

看起来像第三个示例代码和exception不匹配。 如果代码是: "No property or field 'CandidateId' exists in type 'Int32'"则会出现exception:

 int[] CandidateIdsArray = new int[]{4, 78, 101} var dynamicLinqQuery = CandidateIdsArray.Where("@0.Contains(CandidateId)", CandidateIdsArray); 

但是你提供的代码看起来是正确的,应该可行:

 int[] CandidateIdsArray = new int[]{4, 78, 101} var dynamicLinqQuery = Candidates.Where("@0.Contains(CandidateId)", CandidateIdsArray); 

请尝试以下方法:

 var validCandidateIds = new List(){4, 78, 101}; var filteredCandidates = Candidates.Where( "@0.Contains(CandidateId)", validCandidateIds); 

应该等于(但可能慢于):

 var validCandidateIds = new List(){4, 78, 101}; var filteredCandidates = Candidates.Where( c => validCandidateIds.Contains(c.CandidateId));