实体框架中的查询

时间:2011-06-03 10:41:52

标签: asp.net asp.net-mvc

我必须获取那些像'zipcode'这样的记录,其中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>");
}

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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());