Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将.Contains与Int数据类型一起使用_Asp.net Mvc_Linq - Fatal编程技术网

Asp.net mvc 如何将.Contains与Int数据类型一起使用

Asp.net mvc 如何将.Contains与Int数据类型一起使用,asp.net-mvc,linq,Asp.net Mvc,Linq,下面的代码是搜索功能代码的一部分,它从URL获取查询字符串并搜索数据库 除了一件事BatchID之外,一切都很好。将抛出以下错误消息。BatchID是数据库中的数据类型Int。由于这个原因,它导致了一个错误。我试着用(string)来铸造,但是运气不好 错误消息 严重性代码说明项目文件行错误CS1061“int”不存在 不包含“Contains”的定义,也不包含扩展方法 “Contains”接受类型为“int”的第一个参数 (是否缺少using指令或程序集 参考?)CardDistro E:\w

下面的代码是搜索功能代码的一部分,它从URL获取查询字符串并搜索数据库

除了一件事
BatchID
之外,一切都很好。将抛出以下错误消息。
BatchID
是数据库中的数据类型
Int
。由于这个原因,它导致了一个错误。我试着用
(string)
来铸造,但是运气不好

错误消息

严重性代码说明项目文件行错误CS1061“int”不存在 不包含“Contains”的定义,也不包含扩展方法 “Contains”接受类型为“int”的第一个参数 (是否缺少using指令或程序集 参考?)CardDistro E:\wwwroot\CardDistro\CardDistro \控制器\CardsController.cs 32


如果
BatchID
属性是
int
类型,则不能使用
Contains
,因为它在数组上工作。您可以使用
=
运算符直接检查该值

由于您也在使用相同的
string
参数(
QueryString
)来获取id值,因此应该使用
TryParse
方法将字符串安全地解析为int变量值(如果它是int值的有效字符串表示形式)并使用它。如果
BatchID
值始终大于
0
,则可以将局部变量初始化为0,如果查询字符串具有有效的数值,则解析它并更新局部变量,并在LINQ表达式中使用该值

int id = 0;
if (Int32.TryParse(QueryString, out id))
{
}
var results = db.Transactions
                 .Where(x => x.Card.InCome.InComePayerName.Contains(QueryString) || 
                             x.Card.InCome.InComePayerEmail.Contains(QueryString) ||
                             x.Card.InCome.InComePayerTIN.Contains(QueryString) ||
                             x.Card.Port.PortName.Contains(QueryString) ||
                             x.BatchID == id   
                       )
                       .OrderByDescending(x => x.TTransactionID)
                       .GroupBy(x => x.BatchID)
                       .Select(x => x.FirstOrDefault())
                       .ToList();

如果
BatchID
属性是
int
类型,则不能使用
Contains
,因为它在数组上工作。您可以使用
=
运算符直接检查该值

由于您也在使用相同的
string
参数(
QueryString
)来获取id值,因此应该使用
TryParse
方法将字符串安全地解析为int变量值(如果它是int值的有效字符串表示形式)并使用它。如果
BatchID
值始终大于
0
,则可以将局部变量初始化为0,如果查询字符串具有有效的数值,则解析它并更新局部变量,并在LINQ表达式中使用该值

int id = 0;
if (Int32.TryParse(QueryString, out id))
{
}
var results = db.Transactions
                 .Where(x => x.Card.InCome.InComePayerName.Contains(QueryString) || 
                             x.Card.InCome.InComePayerEmail.Contains(QueryString) ||
                             x.Card.InCome.InComePayerTIN.Contains(QueryString) ||
                             x.Card.Port.PortName.Contains(QueryString) ||
                             x.BatchID == id   
                       )
                       .OrderByDescending(x => x.TTransactionID)
                       .GroupBy(x => x.BatchID)
                       .Select(x => x.FirstOrDefault())
                       .ToList();