实体框架中的查询

时间:2011-06-01 13:37:13

标签: asp.net asp.net-mvc

我编写了以下查询,它给出错误无法转换类型为

的对象

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 = "";
    }
}

3 个答案:

答案 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 
};