SearchDecimalValuesinLinqQuery我有这个搜索条件[HttpPost]publicActionResultIndex(stringsearchString){if(!String.IsNullOrEmpty(searchString)){students=students.Where(s=>s.FIRST_NAME.Contains(searchString)||s.LAST_NAME.Contains(searchString)||s.PERSONAL_NUMBER.Contains(searchString)||s.ACD_UNI_DEGREES.DEGREE.Contains(searchString)||s.ACD_UNI_FACULTIES.FACULTY.Contains(searchString)||s.ACD_UNI_SPECIALIZATIONS.SPECIALIZATION.Contains(searchString)||SqlFunctions.StringConvert(s.SEMESTER).Contains(searchString)|||SqlFunctions.StringConvert(s.CREDIT_COUNT).包含(搜索字符串));}returnView(students.ToList());但是在调试时会抛出异常:System.NotSupportedException:Type"System.Data.Objects.SqlClientSpecifiedmethod'System.StringStringConvert(System.Nullable`1[System.Decimal])'of.SqlFunctions"cannotbeconvertedtoaLINQtoEntities存储表达式。问题在这里:SqlFunctions.StringConvert(s.SEMESTER).Contains(searchString)SEMESTER是十进制,searchString是字符串。我该如何改进呢?您应该确保使用System.Data.Entity.SqlServer.SqlFunctions。我重写了您的查询,一切正常。虽然这是一个发布答案的老问题,以便其他人会正确地做,但首先要纠正的是我们需要将第一个整数转换为十进制然后进行搜索,假设可搜索列的数据类型也是十进制所以首先转换搜索字符串到十进制十进制dec;boolIsDecimal=decimal.TryParse(searchString,outdec);//将搜索截断为2位数字,这应该等于您的数据库//列精度,以便正确处理舍入大小写decimalTruncateDigits=-1;如果(IsDecimal)TruncateDigits=Convert.ToDecimal(Math.Truncate(dec*100)/100);现在您的搜索字段与您的数据库列精度相同并准备好搜索students=students.Where(s=>s.FIRST_NAME.Contains(searchString)||s.LAST_NAME.Contains(searchString)||s.PERSONAL_NUMBER.Contains(搜索字符串)||s.ACD_UNI_DEGREES.DEGREE.Contains(searchString)||FACULTY.Contains(searchString)||s.ACD_UNI_SPECIALIZATIONS.SPECIALIZATION.Contains(searchString)||(IsDecimal&&(decimal.Round(s.SEMESTER,2)==TruncateDigits))需要注意的是(IsDecimal&&(decimal.Round(s.SEMESTER,2)==TruncateDigits))这里我们再对db列精度进行四舍五入处理四舍五入。SqlFunctions.StringConvert也会在内部进行舍入,所以如果你的数字是db是68.88并且你正在搜索它不会搜索68因为StringConvert会给你69(四舍五入)所以如果你想搜索68那么你需要使用Floor该函数类似于SqlFunctions.StringConvert(decimal.Floor(s.SEMESTER)).Contains(searchString)希望这有帮助!!!我现在面临同样的问题,我的目标是完全相同的原则。经过长时间的搜索,我终于找到了这个:[HttpPost]publicActionResultIndex(stringsearchString){searchString=searchString.Replace(",",".");如果(!String.IsNullOrEmpty(searchString)){students=students.Where(s=>s.FIRST_NAME.Contains(searchString)||s.LAST_NAME.Contains(searchString)||s.PERSONAL_NUMBER.Contains(searchString)||s.ACD_UNI_DEGREES.DEGREE.Contains(searchString)||s.ACD_UNI_FACULTIES.FACULTY.Contains(searchString)||s.ACD_UNI_SPECIALIZATIONS.SPECIALIZATION.Contains(searchString)||(s.SEMESTER.ToString()).Contains(searchString)||||SqlFunctions.StringConvert(s.CREDIT_COUNT).Contains(searchString));}returnView(students.ToList());您正在使用ToString()将十进制转换为普通字符串。然而,这里的后盾是法术武器:(s.SEMESTER.ToString())这会有所不同。此语法将允许您使用符号进行搜索。(例如:1203.4而不是1203,4)。它不是真正的用户友好。要解决此问题,请在searchString上使用.Replace(',','.')。这将适用于背景技巧,没有人会注意到。我希望它能帮助任何遇到同样问题的人。以上就是C#学习教程:在Linq查询中查找十进制值,分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
