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();
        }

ただし、このエラーが発生し続けます:

1[<>f__AnonymousType0タイプ 'System.Collections.Generic.List 1[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 に答える