14

在 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' 类型中不存在适用的方法 'Contains'”

还尝试了以下另一种方式

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

运行时异常 - “'Int32' 类型中不存在属性或字段 'CandidateId'”

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

4

5 回答 5

9

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

outerItContains.

在您的示例中:

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

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

于 2016-09-28T18:20:15.823 回答
1

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

于 2013-03-26T09:10:16.787 回答
1

我不知道 Dynamic Linq 但对我来说很明显该类型Int32不包含任何名为Contains. string在调用之前将其转换为 a 怎么样Contains

var dynamicLinqQuery = Candidates.Where("CandidateId.ToString().Contains(@0)", CandidateIdsArray);
于 2013-03-26T09:15:07.977 回答
0

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

编辑:

看起来在第三个示例代码中,异常不匹配。"No property or field 'CandidateId' exists in type 'Int32'"如果代码是:你会得到异常:

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);
于 2013-03-26T09:12:28.947 回答
0

尝试以下操作:

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

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

var validCandidateIds = new List<int>(){4, 78, 101};
var filteredCandidates = Candidates.Where(
    c => validCandidateIds.Contains(c.CandidateId));
于 2016-09-28T18:44:32.163 回答