2010-06-23 3 views
1

I 나타나는 오류 메시지는 다음과 같습니다구문 오류가

private static IEnumerable<Result> setOrderBy(IEnumerable<Result> value, string order) 
{ 
    if (order.Equals("ASC")) 
    { 
     //value = value.OrderBy(c => c, new SearchService.ResultComparer<Attribute>()); 
     value = value.OrderBy<Result>(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>()); 
     //value = value.OrderBy(o => o.StringAttributes.Where(p => p.AttributeName == "Title"), new SearchService.ResultComparer<AttributeItem>())); 
    } 
    if (order.Equals("DESC")) 
    { 
     value = value.OrderByDescending(c => c, new SearchService.ResultComparer<Attribute>()); 
     //value = value.OrderByDescending(o => o.StringAttributes.Where(p => p.AttributeName == "MatterName")); 
    } 
    return value; 
} 

A :

하나 이상의 객체가이 아래에있다하여 IComparable

코드의 원인을 구현해야합니다 작은 배경 : 내 MVC2 응용 프로그램에서 내 검색 컨트롤러에서 검색을 수행합니다. 결과보기로 결과를 보내면 결과를 오름차순 또는 내림차순으로 알파벳순으로 정렬하려고합니다. 그러나 결과 객체의 OrderBy 속성을 설정하는 로직을 작성할 때 VS2008에서 볼 수 있듯이 코드 밑에 구불 구불 한 빨간색 선이 생깁니다. 어떤 이유로이 메서드는 정렬을 수행하려고하는 데이터 모델을 좋아하지 않습니다. 각 Result 객체에는 다양한 속성이 있습니다. 그 중 하나는 string 유형의 속성 목록입니다 (따라서 StringAttributes라는 이름). All에있는 String 속성 중 하나의 값으로 내 IEnumerable 컬렉션의 각 Result 객체를 정렬하려고합니다. 내 결과 기록.

도와주세요.

+1

은 온라인에서 당신은 에러가 발생합니까? – decyclone

+1

btw, 하나만 가능하기 때문에'if() {} else if() {}'를 사용하는 것이 더 좋습니다 – abatishchev

+0

고마워요. 보통 프로그래밍 할 때, 먼저 리펙토링을하고, 리펙토링을합니다. Agile Programming 어때요? – user374094

답변

2

주문시 Attribute을 골라내는 곳에서 Where() 대신 First() 또는 Single을 사용해야한다고 생각합니다. 현재 특정 속성이 아닌 IEnumerable<Attribute>을 사용하여 OrderBy에 주문 계산을 요청하는 중입니다.

value = value.OrderBy<Result>(o => o.StringAttributes.Single(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>()); 

또는

value = value.OrderBy<Result>(o => o.StringAttributes.First(p => p.AttributeName == "Title"), new SearchService.ResultComparer<Attribute>()); 
+0

나는 당신의 방법을 시도하고 저에게 말하는 구불 구불 한 선을 얻는다 : "방법의 유형 매개 변수는 사용법에서 추론 될 수 없다. 명시 적으로 인수를 TryPLecifying" 나를 버리고있는 OrderBy에서 유형 접미어를 제거했다. with : value.OrderBy (o => o.StringAttributes.First (p => p.AttributeName == "Title"), 새 SearchService.ResultComparer ()); 그러나 이것은 작동하지 않습니다. s 모델을 전달하면 오류가 발생하지 않지만 올바른 기준을 사용하여 orderby를 수행하지는 않습니다. 예 : value.OrderBy (o => o, new SearchService.ResultComparer ()); – user374094

+0

StringAttributes 컬렉션의 형식은 무엇입니까? IEnumerable 일까요? 아니면 다른 것입니까? 형식이 전달할 IComparer 형식과 일치하는지 확인해야합니다. StringAttributes가 IEnumerable 이면 IComparer

+0

을 전달해야합니다. StringAttributes는 목록입니다. 각 속성에는 다음과 같은 두 가지 속성이 있습니다. AttributeName 및 List 각 AttributeItem은 속성에 사용할 수있는 값의 목록입니다. 각 결과에 대해 AttributeItems는 해당 레코드와 연결된 값일뿐입니다. – user374094

관련 문제