我必须获取那些像'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>");
}
答案 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();
如您所见,查询有效:
答案 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());