【问题标题】:Cannot implicitly convert type to List<string>无法将类型隐式转换为 List<string>
【发布时间】:2012-08-03 12:17:34
【问题描述】:

下午,

我收到以下错误,但不知道为什么...有人可以看看,让我知道我哪里出错了。

无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”

下面是我想要使用的,以获取列表,以便我可以在亚马逊上使用它。我试图删除 .ToList() 位,但似乎没有任何效果。我正在调用一个 MS SQL 视图“GetASINForUpdateLowPrices”,它返回产品 ASIN 的列表

 List<string> prodASINs = dc.GetASINForUpdateLowPrices.ToList();

我正在使用的视图的 SQL,这可能会有所帮助。

 SELECT     asin
 FROM         dbo.aboProducts
 WHERE     (asin NOT IN
           (SELECT     aboProducts_1.asin
            FROM       dbo.aboProducts AS aboProducts_1 INNER JOIN
                       dbo.LowestPrices ON aboProducts_1.asin = dbo.LowestPrices.productAsin
            WHERE      (dbo.LowestPrices.priceDate >= DATEADD(day, - 1, GETDATE()))))

【问题讨论】:

  • 你需要初始化列表吗?
  • 是的,亚马逊 MWS 需要这种格式 sigh

标签: asp.net linq-to-sql sql-view


【解决方案1】:

单个ASIN是什么数据类型?

您的GetASINForUpdateLowPrices 可能不是IEnumerable&lt;string&gt;。试试这个来确认:

List<string> prodASINs = dc.GetASINForUpdateLowPrices
                           .Select(e => e.ToString())
                           .ToList();

【讨论】:

    【解决方案2】:

    当您调用 GetASINForUpdateLowPrices 时,即使您的视图中只有一个字段,它也不会直接返回 List&lt;string&gt;。尝试以下方法:

    List<string> prodASINs = dc.GetASINForUpdateLowPrices
                           .Select(item => item.AsinFieldName)
                           .ToList();
    

    Visual Studio IntelliSense 应在键入 item. 后向您建议属性名称。如果属性不是字符串,请尝试在属性名称末尾添加 .ToString()。

    编辑:在您发表评论后,您似乎需要将其用作.Select(item =&gt; item.asin.ToString())

    【讨论】:

    • 补充说,我使用视图的原因是由于 SQL 的编写方式:)
    • 干杯,但如果我使用它,我可以取回列表。我以前也有类似的,但现在我只需要获取在最后一天内没有更新的 ASIN:D
    • “找回列表”是什么意思?
    • 没关系,现在排序了,看来你的代码和 Yuck 的代码工作了 :)
    【解决方案3】:

    只需使用 var。

    var prodASINs = dc.GetASINForUpdateLowPrices.ToList();
    

    【讨论】:

    • 这当然可以,但是如果后面的代码期望 prodASINsList&lt;string&gt; 类型,它就行不通了。
    • 他可以计算出返回的内容并根据需要进行转换。
    • 不能使用 var,因为亚马逊代码不会接受它。这就是为什么我使用 List 作为他们要求的原因
    • ...这就是我的答案。他首先需要知道来自dc.GetASINForUpdateLowPrices 的类型。
    【解决方案4】:

    您确定GetASINForUpdateLowPrices.ToList() 创建了一个字符串列表吗?我最好的估计是它是不同类型的通用列表。

    要弄清楚发生了什么 - 将 List&lt;string&gt; prodASINS 更改为 Object obj。然后设置断点,通过使用调试器检查对象来查看 ToList() 代码实际生成的 List 类型。然后,您可以更新代码以将值移动到适当类型的列表中。

    您可能必须像这样强制转换分配器的右侧才能最终完成工作(如有必要,将字符串替换为其他类型)-List&lt;string&gt; prodASINs =(List&lt;string&gt;)dc.GetASINForUpdateLowPrices.ToList()

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多