Linq转换

时间:2010-01-20 17:45:27

标签: linq iqueryable

我使用以下代码返回IList:

public IList<string> FindCodesByCountry(string country)
        {
            var query = from q in session.Linq<Store>()
                        where q.Country == country
                        orderby q.Code
                        select new {q.Code};

            return (IList<string>) query.ToList();
        }

但是我一直收到这个错误:

无法将类型为'System.Collections.Generic.List 1[<>f__AnonymousType0 1 [System.String]]'的对象强制转换为'System.Collections.Generic.IList`1 [System.String]'。< / p>

我应该回到这里?

6 个答案:

答案 0 :(得分:4)

只要q.code是一个字符串,这应该工作: 请注意,它没有创建匿名对象,只是选择了字符串。

    public IList<string> FindCodesByCountry(string country)
    {
        var query = from q in session.Linq<Store>()
                    where q.Country == country
                    orderby q.Code
                    select q.Code;

        return query.ToList();
    }

答案 1 :(得分:2)

您选择匿名类型是否有原因?如果不试试这个......

    var query = from q in session.Linq<Store>()
                where q.Country == country
                orderby q.Code
                select q.Code;

答案 2 :(得分:1)

怎么样

query.Select(s => s.ToString()).ToList();

或者

query.Cast<String>().ToList();

但我假设q.Code是一个字符串?在这种情况下,您只想更改LINQ表达式:

var query = from q in session.Linq<Store>()
                    where q.Country == country
                    orderby q.Code
                    select q.Code;

答案 3 :(得分:1)

在查询中,不要选择包含字符串的匿名类,只需选择字符串本身:

var query = from q in session.Linq<Store>()
            where q.Country == country
            orderby q.Code
            select q.Code;

答案 4 :(得分:1)

您无法将自定义类型列表强制转换为字符串列表。最简单的方法是让你的query对象以iEnumerable字符串列表开头,而不是自定义类型。将您的选择行更改为:

select new q.Code.toString();

你会很好。如果q.Code本身就是一个开头的字符串,那么.ToString()就没有必要了。

答案 5 :(得分:0)

试试这个:

return query.ToList<string>();