Linq 使用实体框架从数据库中选择错误
我有一个方法,可以从数据库中选择两个字段,其中第一个字段中的文本匹配某个值Linq 使用实体框架从数据库中选择错误,linq,entity-framework,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
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;
}
public static List SelectForSearch(字符串字母)
{
var数据=(来自model.City中的p
其中p.Name.StartsWith(字母)
选择新列表{p.Name,p.CountryName}).ToList();
返回数据;
}
但它会返回一个如下列表:
[0][0]澳大利亚[0][1]巴利纳 [1] [0]浆果
[1] [1]澳大利亚 [2] [0]澳大利亚
[2] [1]本迪戈
Country and City Position没有这样的静态索引: [0][0]Ballina
[0][1]澳大利亚 [1] [0]浆果
[1] [1]澳大利亚 [2] [0]本迪戈
[2] [1]澳大利亚
您的问题是,在select语句中,您创建的不是带有Name和CountryName的类型,而是字符串列表。列表初始化器允许您在通过将值放置在
{}
中构建列表时传入值,您无意中使用了此功能,正如您所看到的,它创建了一个字符串列表,其中名称是第一个元素,国家名是第二个元素。你想做的更像是:
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;
}
public static List SelectForSearch(字符串字母)
{
var数据=(来自model.City中的p
其中p.Name.StartsWith(字母)
选择new CityCountryPair(){City=p.Name,
CountryName=p.CountryName
}).ToList();
返回数据;
}