4

我正在使用以下代码返回 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__AnonymousType01[System.String]]”类型的对象转换为“System.Collections.Generic.IList`1[System.String]”类型。

我应该在这里返回什么?

4

6 回答 6

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();
    }
于 2010-01-20T17:49:08.470 回答
2

您选择匿名类型有什么原因吗?如果不试试这个...

    var query = from q in session.Linq<Store>()
                where q.Country == country
                orderby q.Code
                select q.Code;
于 2010-01-20T17:49:25.460 回答
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;
于 2010-01-20T17:49:30.813 回答
1

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

var query = from q in session.Linq<Store>()
            where q.Country == country
            orderby q.Code
            select q.Code;
于 2010-01-20T17:50:10.433 回答
1

您不能将自定义类型列表转换为这样的字符串列表。最简单的方法是让您的query对象作为 iEnumerable 字符串列表开始它的生命,而不是自定义类型。将您的选择行更改为:

select new q.Code.toString();

你会好起来的。如果 q.Code 本身就是一个字符串开头,那么.ToString()就不需要了。

于 2010-01-20T17:52:27.500 回答
0

试试这个:

return query.ToList<string>();
于 2010-01-20T17:46:23.910 回答