"1", "2", "3", "10"등의 문자열이 있는데 orderby 정렬 목록을 사용하면 "1", "10", "2 ","삼". 1,2,3, ..., 10과 같이 숫자를 정렬하고 싶습니다. 아래 코드를 사용하여 목록을 정렬합니다.엔터티에 linq의 숫자로 정렬 문자열
LINQ to Entities does not recognize the method 'System.Linq.IOrderedQueryable`1[Salary.Classes.ReturnData] OrderBy[ReturnData,String](System.Linq.IQueryable`1[Salary.Classes.ReturnData], System.Linq.Expressions.Expression`1[System.Func`2[Salary.Classes.ReturnData,System.String]], System.Collections.Generic.IComparer`1[System.String])' method, and this method cannot be translated into a store expression.
그것은 기존 데이터베이스의 다른 응용 프로그램에 오류가 발생 할 수 있기 때문에 내가 어떤 데이터 유형을 변경할 수 없습니다 : 나는이 코드를 실행하면
var model = (from c in General.db.GlbTbComboBases
where c.ClassCode.Equals(classCode)
select new ReturnData { id = c.BaseCode, name = c.FAName }).OrderBy(c => c.id,
new SemiNumericComparer());
if (model.Any())
{
CacheManager.cache.GetOrAdd<List<ReturnData>>(key,() =>
model.ToList<ReturnData>());
return model.ToList<ReturnData>();
}
public class SemiNumericComparer : IComparer<string>
{
public int Compare(string s1, string s2)
{
if (IsNumeric(s1) && IsNumeric(s2))
{
if (Convert.ToInt32(s1) > Convert.ToInt32(s2)) return 1;
if (Convert.ToInt32(s1) < Convert.ToInt32(s2)) return -1;
if (Convert.ToInt32(s1) == Convert.ToInt32(s2)) return 0;
}
if (IsNumeric(s1) && !IsNumeric(s2))
return -1;
if (!IsNumeric(s1) && IsNumeric(s2))
return 1;
return string.Compare(s1, s2, true);
}
public static bool IsNumeric(object value)
{
try
{
int i = Convert.ToInt32(value.ToString());
return true;
}
catch (FormatException)
{
return false;
}
}
}
나는이 오류가 발생합니다.
숫자를 문자열 형태로 저장하는 것처럼 보입니다. 필요에 따라 int 또는 decimal로 저장 한 다음 원하는대로 줄 것입니다. –
"자연 정렬 순서"라고합니다. 비교적 쉬운 방법이 있습니다 - [여기 내 대답을보십시오] (http://stackoverflow.com/a/19271974/106159). –
Martin 대단히 감사합니다. –