以下代码是搜索功能代码的一部分,该代码从URL获取查询字符串并搜索数据库。
除了BatchID
之外,一切都很有效。这会引发以下错误消息。 BatchID
是数据库中的DataType Int
。由于这个原因,它导致了错误。我尝试选择(string)
,但没有运气
错误消息
严重级代码描述项目文件行错误CS1061'int'确实如此 不包含'Contains'的定义,也没有扩展方法 可以找到'包含'接受'int'类型的第一个参数 (你错过了使用指令或程序集吗? 参考?)CardDistro E:\ wwwroot \ CardDistro \ CardDistro \ Controllers \ CardsController.cs 32
QueriedTransactionList = db.Transactions
.Where(x => x.Card.InCome.InComePayerName.Contains(QueryString) ||
x.Card.InCome.InComePayerEmail.Contains(QueryString) ||
x.Card.InCome.InComePayerTIN.Contains(QueryString) ||
x.BatchID.Contains( (string) QueryString) //Error over here ||
x.Card.Port.PortName.Contains(QueryString)
)
.OrderByDescending(x => x.TTransactionID)
.GroupBy(x => x.BatchID)
.Select(x => x.FirstOrDefault())
.ToList();
答案 0 :(得分:2)
如果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();