0

LINQ クエリの結果を ObservableCollection に格納しようとしていますが、linq の結果は 10 進数型です。

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost).Distinct());

それは言ってコンパイルされません'The best overloaded method match for 'System.Collections.ObjectModel.ObservableCollection<string>.ObservableCollection(System.Collections.Generic.IEnumerable<string>)' has some invalid arguments.

私はここを見ましたが、あまり役に立ちませんでした。

アップデート

次のことを試しましたが、成功しませんでした:

ObservableCollection<string> cost = 
new ObservableCollection<string>((from i in context.Items
                                  where i.Cost != null
                                     && i.Cost > 0
                                  orderby i.Cost
                                  select i.Cost).Distinct()
                                                .Select(i=>i.ToString()));

ObservableCollection<string> cost = 
new ObservableCollection<string>((from i in context.Items
                                  where i.Cost != null
                                  && i.Cost > 0
                                  orderby i.Cost
                                  select i.Cost.ToString()).Distinct());

LINQPad で両方を実行すると、次のエラーが発生します。
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression. Message LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

4

5 に答える 5

2

ToString 後に を行いDistinctます。そうすれば、それほど多くの文字列を作成せず、それらの文字列を個別に比較することはありません。

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                      where i.Cost != null
                                         && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost).Distinct()
                                                    .Select(i=>i.ToString()));
于 2013-03-27T15:34:43.663 に答える
2

試す

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost).Distinct()
                                                    .AsEnumerable()
                                                    .Select(c => c.ToString()));

ToString()どうやら EF プロバイダーは呼び出しを SQL に変換できないようAsEnumerable()ですToString()

于 2013-03-27T17:34:43.513 に答える
2

次の文字列に変換CostしますToString

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost.ToString()).Distinct());

CultureInfoを呼び出すときに、必要なものがあれば何でも使用してくださいToString()

于 2013-03-27T15:27:30.637 に答える
1

ToString() を使用しないのはなぜですか?

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                  where i.Cost != null
                                  && i.Cost > 0
                                  orderby i.Cost
                                  select i.Cost.ToString()).Distinct());
于 2013-03-27T15:28:01.510 に答える
0

から文字列値を選択して、にキャストしcontext.Itemsて作成する必要がありますObservableCollection<string>String

ObservableCollection<string> cost = 
    new ObservableCollection<string>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost.ToString()).Distinct());

またはObservableCollection<decimal>

ObservableCollection<decimal> cost = 
    new ObservableCollection<decimal>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost).Distinct());
于 2013-03-27T15:29:24.140 に答える