1

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

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 和 City 位置没有这样的静态索引:

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

[1][0]贝瑞
[1][1]澳大利亚

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

4

1 回答 1

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;
}
于 2012-07-27T20:15:01.193 回答