获取a无法将类型'System.Collections.Generic.List <anonymoustype#1>'隐式转换为'System.Collections.Generic.List <string>'</string> </anonymoustype#1>

时间:2015-04-07 19:01:33

标签: c# asp.net asp.net-mvc

调用此方法时出错。需要两个属性firstName和lastName

[WebMethod]
public static List<string> GetEmployees(string lifeNumber)
{
    PCF.Entities.Data.Entities db = new PCF.Entities.Data.Entities();
    var data = db.MasterTables
                 .Where(x => x.Life_Hosp == lifeNumber)
                 .Select(x => new { x.FirstName, x.LastName });
    return data.ToList();
}

2 个答案:

答案 0 :(得分:2)

data是一个匿名类型的列表,其中包含两个属性FirstName,另一个属于LastName。您的方法的返回类型是字符串列表。显然,您的方法的返回类型与您的返回值之间存在差异。

有两种选择。

第一种方法是更改​​方法的返回类型并更改从方法体返回的类型。

第二种方法是将从方法体返回的字符串更改为字符串。

由于Moo-Juice已经向您展示了后一种选择,我将尝试向您展示第一种选择。

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

[WebMethod]
public static List<Employee> GetEmployees(string lifeNumber)
{
    PCF.Entities.Data.Entities db = new PCF.Entities.Data.Entities();
    var data = db.MasterTables
                .Where(x => x.Life_Hosp == lifeNumber)
                .Select(x => new Employee
                 {
                     FirstName = x.FirstName, 
                     LastName = x.LastName 
                 });
    return data.ToList();
}

答案 1 :(得分:2)

正如Servy在评论中提到的那样,这是非常自我解释的。

data将成为名字和姓氏的集合。最明显不是List<string>

您可能想要尝试以下方面:

var data = db.MasterTables
                .Where(x => x.Life_Hosp == lifeNumber)
                .Select(x => string.Concat(x.FirstName, " ", x.LastName));

结果是一个字符串 - 这就是你想要的。现在,鉴于刚刚发表的评论,您可以做其他事情:

public sealed class Name 
{ 
    public string FirstName { get; set; }
    public string LastName { get; set; }
} // eo class Name

然后你的查询是:

var data = db.MasterTables
                .Where(x => x.Life_Hosp == lifeNumber)
                .Select(x => new Name() { FirstName = = x.FirstName, LastName = y.LastName });

但显然您必须更改方法的返回值:

相关问题