Lambda Expression新手如何从一种类型转换为另一种类型

时间:2013-11-13 03:57:41

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

我正在尝试返回国家/地区列表,并将返回值分配给CountryCode和CountryName,我不断收到这些错误:

无法将类型'System.Collections.Generic.List隐式转换为'System.Linq.IQueryable'。存在显式转换(您是否错过了演员?)

运算符'=='不能应用于'string'和'System.Collections.Generic.List

类型的操作数

这是我的代码:

public class CountryViewModel
{
    public string CountryCode { get; set; }
    public string CountryName { get; set; }


    /*SELECT COUNTRIES */

    public static IQueryable<CountryViewModel> GetCountries()
    {
        DbEntities _context = new DbEntities();

        var featureCode = "PCLI";

        var countries = _context.country
                        .Where(c => c.Feature_Code == featureCode
                        .Select(n => new CountryViewModel
                        {
                            CountryCode = c.Country_Code,
                            CountryName = c.Name
                        }
                        ));

        return countries;

}

我找不到合适的例子来帮助我,任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

我认为.Where子句的结束“)”应该在“featureCode”之后,就在.Select之前。错误消息听起来像假设Select子句是条件的一部分。

答案 1 :(得分:0)

在您的示例中,您要返回的变量“countries”是IEnumerable,而不是您原型化的IQueryable。我想你可以返回countries.AsQueryable()。如果要返回列表,则返回countries.ToList()。

答案 2 :(得分:0)

据我所见,您的代码有些问题。另外我假设DbEntities实现IDisposable所以你应该把它包装在using语句中。

public class CountryViewModel
{
    public string CountryCode { get; set; }
    public string CountryName { get; set; }

    public static IQueryable<CountryViewModel> GetCountries()
    {
        using (DbEntities _context = new DbEntities())
        {
            var featureCode = "PCLI";

            var countries = _context.country
                .Where(c => c.Feature_Code == featureCode)
                .Select(c => new CountryViewModel
                {
                    CountryCode = c.Country_Code,
                    CountryName = c.Name
                }
            );

            return countries;
        }
    }
}