Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用实体框架从数据库中选择错误_Linq_Entity Framework - Fatal编程技术网

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();
返回数据;
}