使用Entity Framework从数据库中选择错误

时间:2012-07-26 18:44:00

标签: linq entity-framework

我有一个方法从数据库中选择两个字段,其中第一个字段中的文本与某个值匹配

public static List<List<string>> SelectForSearch(string letter)
{
    var data = (from p in model.City
                where p.Name.StartsWith(letter)
                select new List<string> { p.Name, p.CountryName }).ToList();
    return data;
}

但它给我一个这样的清单:

  

[0] [0]澳大利亚
  [0] [1]巴利纳

     

[1] [0]浆果
  [1] [1]澳大利亚

     

[2] [0]澳大利亚
  [2] [1]本迪戈
  ......

Country and City possition没有这样的静态索引:

  

[0] [0]巴利纳
  [0] [1]澳大利亚

     

[1] [0]浆果
  [1] [1]澳大利亚

     

[2] [0]迪戈
  [2] [1]澳大利亚
  ...

1 个答案:

答案 0 :(得分:2)

您的问题是,在您的select语句中,您创建的是字符串列表,而不是使用Name和CountryName创建类型。 List初始化器允许您在构建列表时传入值,方法是将它们放在{ }中,并且您正在使用此功能,因为您看到它创建了一个字符串列表,其中名称是第一个元素,国名是第二个要素。你想要做的更像是:

var data = (from p in model.City
            where p.Name.StartsWith(letter)
            select new { City = p.Name, CountryName = p.CountryName }).ToList();
return data;

这是使用匿名类型,因为你想要为返回值声明一个类型。所以你应该真正创建一个存储类,例如:

public class CityCountryPair 
{
    public String City { get; set; }
    public String CountryName { get; set; }
}

然后您的方法变为

public static List<CityCountryPair> SelectForSearch(string letter)
{
    var data = (from p in model.City
                where p.Name.StartsWith(letter)
                select new CityCountryPair() { City = p.Name, 
                                               CountryName = p.CountryName 
                                              }).ToList();
    return data;
}