我编写了以下查询,它给出错误无法转换类型为
的对象 System.Data.Objects.ObjectQuery'[ITClassifieds.Models.Viewsearch]' to type 'ITClassifieds.Models.Viewsearch'.
我的代码如下
if (zipcode.Contains(","))//opening of zipcode conatins comma
{
do
{
zipcode = zipcode.Replace(" ", " ");
zipcode = zipcode.Replace(", ", ",");
} while (zipcodecity.Contains(" "));
char[] separator = new char[] { ',' };
string[] temparray = zipcode.Split(separator);
var zipcd = (from u in db.ZipCodes1
where u.CityName == temparray[0] && u.StateAbbr == temparray[1] && u.CityType == "D"
select new Viewsearch
{
Zipcode = u.ZIPCode
}).Distinct();
Viewsearch vs = (Viewsearch)zipcd;
if (zipcd.Count() > 0)
{
zipcode = vs.Zipcode;
locations = "";
}
else
{
tempStr = "";
zipcode = "";
}
}
答案 0 :(得分:1)
你需要做
如果它永远存在:
Viewsearch vs = zipcd.First()
如果不使用,则在使用
之前检查null Viewsearch vs = zipcd.FirstOrDefault()
如果总是有1或无,你也可以使用Single
。
答案 1 :(得分:0)
Distinct
方法返回一个可枚举的集合(在你的情况下,和ObjectQuery<T>
,它可能包含多个元素。你不能将它直接类型转换为集合中的一个项目,你需要使用其中一个IEnumerable方法来获取它:
Viewsearch vs = zipcd.SingleOrDefault();
if ( vs != null )
{
zipcode = vs.Zipcode;
locations = String.Empty;
}
else
{
zipcode = String.Empty;
tempStr = String.Empty;
}
如果集合中有多个项目, SingleOrDefault
将抛出异常;如果这是一个问题,你也可以使用FirstOrDefault
来获取第一个项目,作为一个例子。
此外,与您的问题无关,但您不需要字符串分隔符的临时数组变量。 Split方法的参数是params
数组,因此您可以像这样调用它:
string[] temparray = zipcode.Split(',');
答案 2 :(得分:0)
将zipcd查询替换为:
var cityName = temparray[0];
var stateAbbr = temparray[1];
Viewsearch vs = new Viewsearch {
Zipcode = db.ZipCodes1.Where(u.CityName == cityName && u.StateAbbr == stateAbbr && u.CityType == "D").First().ZIPCode
};