C# 将十进制的linq结果转换为ObservableCollection<;字符串>;

C# 将十进制的linq结果转换为ObservableCollection<;字符串>;,c#,linq,C#,Linq,试图将LINQ查询的结果存储到ObservaleCollection中,但LINQ的结果是十进制类型 ObservableCollection<string> cost = new ObservableCollection<string>((from i in context.Items where i.Cost != null

试图将LINQ查询的结果存储到ObservaleCollection中,但LINQ的结果是十进制类型

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());
observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost).Distinct();
如果说“System.Collections.ObjectModel.ObservaleCollection.ObservaleCollection(System.Collections.Generic.IEnumerable)”的“最佳重载方法匹配”有一些无效参数,则它不会编译。

我看了看,但没多大帮助

更新

我尝试了以下方法,但没有成功:

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()));
observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost).Distinct()
.Select(i=>i.ToString());

observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost.ToString()).Distinct();
当我在LINQPad中同时运行这两个命令时,会出现以下错误:
LINQ to Entities无法识别方法'System.String ToString()'方法,并且无法将此方法转换为存储表达式。

消息LINQ to Entities无法识别“System.String ToString()”方法,并且无法将此方法转换为存储表达式。
成本
转换为具有
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());
observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost.ToString()).Distinct();
调用
ToString()
时,使用您需要的任何
CultureInfo
,为什么不使用ToString()

observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost.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.ToString()).Distinct());
observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost.ToString()).Distinct();
或创建一个
可观察集合

observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost).Distinct();

不同的
之后执行
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).Distinct()
                                                    .Select(i=>i.ToString()));
observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost).Distinct()
.Select(i=>i.ToString());
试试看

observedcollection成本=
新的ObservableCollection((来自context.Items中的i
其中i.成本!=null
&&一、成本>0
订购者i.成本
选择i.Cost).Distinct()
.可计算的()
.Select(c=>c.ToString());

由于EF提供程序显然无法将
ToString()
调用转换为SQL,因此调用
AsEnumerable()
将把查询带到内存中,而
ToString()
调用将使用LINQ访问对象。

我尝试了这个方法,但在运行它时它会自动崩溃。如果我在其上放置断点并尝试介入/跳过它,程序将继续运行并跳过其余代码(如加载表单中的代码,但集合中没有任何代码)。我尝试了您的第一个建议,但得到的结果与我在Weston的帖子中评论的结果相同。很遗憾,我不能使用十进制ObservableCollection。
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> cost = 
    new ObservableCollection<decimal>((from i in context.Items
                                      where i.Cost != null
                                      && i.Cost > 0
                                      orderby i.Cost
                                      select i.Cost).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()));
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()));