使用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));