2012-07-11 3 views
0

내 문제는이 사이트에서 linq 쿼리를 얻을 수있는 관리에 따라 문제가 발생하지만 linq 패드에 모든 것을 붙여 넣을 때 오류가 발생합니다. 여기에 내가 같은 오류 메시지가 무엇입니까 전체 LINQ 쿼리 붙여 넣으려고하고 굵은 영역이 오류를 던지고있다LINQ & Lambda & Lambda

void Main() 
{ 
    List<SearchResult> list = new List<SearchResult>() { 
    new SearchResult(){ID=4,Title="Wie man BBA reman erreicht"}, 
    new SearchResult(){ID=5,Title="Ersatz Airbags, Gurtstrammer und Auto Körper Teile "}, 
    new SearchResult(){ID=6,Title="JCB Excavator - ECU P/N: 728/35700"}, 
    new SearchResult(){ID=2,Title="Geo Prism 1995 GEO - ABS #16213899"}, 
    new SearchResult(){ID=3,Title="Geo Prism 1995 - ABS #16213899"}, 
    new SearchResult(){ID=1,Title="Geo Prism 1995 GEO GEO- ABS #16213899"}, 
    }; 

var to_search = new[] { "Geo", "JCB" }; 
var result = (from searchResult in list 
      let title = searchResult.Title.ToLower() 
      let key_string = to_search.FirstOrDefault(ts => title.Contains(ts)) 
      orderby key_string == null ? -1 : title.Split(new[] { key_string }, StringSplitOptions.None).Length descending 
      group searchResult by key_string into Group 
      select Group).OrderByDescending(grp => grp.Count()).ThenByDescending(CountStringOccurrences(**grp.Key**, to_search)); 
} 

public int CountStringOccurrences(string text, string[] pattern) 
{ 
// Loop through all instances of the string 'text'. 
int count = 0; 
foreach (string itm in pattern) 
{ 
    int i = 0; 
    while ((i = text.IndexOf(itm, i)) != -1) 
    { 
     i += itm.Length; 
     count++; 
    } 
} 
return count; 
} 

public class SearchResult{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
} 

'이름'GRP '를 현재 컨텍스트에 존재하지 않습니다. " 고마워 plzz보세요.

답변

2

변경 Enumerable.ThenByDescending 이후

ThenByDescending(grp => CountStringOccurrences(grp.Key, to_search)); 

ThenByDescending(CountStringOccurrences(grp.Key, to_search)); 

에서 쿼리의 끝은 KeySelector에 기능을 필요로하고 당신은 searchresult - 그룹을 전달하려는.