2011-06-03 171 views
0

我要取的記錄,其中城市名like'zipcode」,其中郵政編碼是可變的,適用條件查詢在實體框架

var zipcd = (from u in db.ZipCodes1 
      where u.CityName.Contains(zipcode) && u.CityType == "D" 
      select u).ToList().Select(u => new Viewsearch 
              { 
               Zipcode = u.ZIPCode, 
               CityName = u.CityName, 
               stateabbr = u.StateAbbr  
              }).Distinct(); 

Viewsearch vs = (Viewsearch)zipcd; 

if (zipcd.Count() > 1) 
{ 
    locations = "United States;" + vs.stateabbr + ";" + vs.CityName; 
} 
else if (locations == "") 
{ 
    locations = "United States;" + vs.stateabbr + ";" + vs.CityName; 
} 
else 
{ 
    locations = "United States;" + vs.stateabbr + ";" + vs.CityName + "," + locations; 
} 
if (zipcd.Count() > 3) is greater than 3 
{ 
    locations = locations.Replace(locations, "," + "<br>"); 
} 
+1

什麼是錯的代碼,你貼?目前還不清楚你在問什麼。 – 2011-06-03 10:43:47

+0

它發出錯誤無法投射類型爲' d__81'1 [ITClassifieds.Models.Viewsearch]'的對象以鍵入'ITClassifieds.Models.Viewsearch'。當從數字值轉換時必須小於無窮大 – DeviPhone26 2011-06-03 10:53:18

回答

0

鮮明在查詢的最終用途IEqualityComparer,我猜你還沒有爲Viewsearch定義了一個。這將是這個樣子:

public class ViewsearchComparer : IEqualityComparer<Viewsearch> 
{ 
    public bool Equals(Viewsearch vs1, Viewsearch vs2) 
    { 
     // Implementation 
    } 

    public int GetHashCode(Viewsearch vs) 
    { 
     // Implementation 
    } 
} 

之後你有定義的,你把它傳遞到你的獨特的呼叫:

.Select(u => new Viewsearch 
{ 
    Zipcode = u.ZIPCode, 
    CityName = u.CityName, 
    Stateabbr = u.StateAbbr  
}) 
.Distinct(new ViewsearchComparer()); 
+0

這不會導致OP的問題 - 默認的相等比較器仍然可以比較對象。但是,集合的類型將是'IQueryable '或其他東西,而不是單個元素的類型,這會導致錯誤。 – 2011-06-03 11:12:00

+0

@Tomas Lycken:你是否看到他在他的評論中指出的錯誤,儘管? d__81'1 [ITClassifieds.Models.Viewsearch]'鍵入'ITClassifieds.Models.Viewsearch'。我認爲這是由於默認比較器的問題。我很想知道這是否可行或現在。 – ataddeini 2011-06-03 11:20:50

+0

@Tomas Lycken:是的,不,我認爲你是對的 - 在閱讀你的答案後,沒有'FirstOrDefault()'的演員是合理的。 +1。 – ataddeini 2011-06-03 11:36:02

1

的問題是,你投迭代到的類型單線條上線
ViewSearch vs = (ViewSearch)zipcd

如果你想vs是一個單一的對象,則必須調用First()FirstOrDefault()在您的收藏:

ViewSearch vs = zipcd.First(); // Throws if there are no elements 
ViewSearch vs = zipcd.FirstOrDefault(); // null if there are no elements 
1

首先,我建議你下載並使用可愛的LINQPad不只有先運行LINQ查詢,但也從中學習(有很多樣的,你可以在那裏運行正確的形式,不需要更多的配置)爲您的問題

var zipcd = (
     from u in db.ZipCodes1 
     where u.CityName.Contains(zipcode) && u.CityType == "D" 
     select new Viewsearch 
     { 
      Zipcode = u.ZIPCode, 
      CityName = u.CityName, 
      stateabbr = u.StateAbbr  
      }).Distinct().ToList(); 

正如你所看到的查詢工作:

enter image description here