【问题标题】:LINQ entity results to List<string>LINQ 实体结果到 List<string>
【发布时间】:2012-01-14 06:44:24
【问题描述】:

我有一个查询,它只返回silverlight4 域服务中实体的一列。如何将结果转换为列表?

public List<string> GetDataForTags() 
{
    var result =  from d in this.ObjectContext.vwBusinessUnits
                  select d.BusinessLineID.Distinct();
    return result;
}   

我尝试使用

return result as List<ToList();

return result.Cast<string>().ToList();

但我得到一个无法将类型错误从Generic.IEnumerable&lt;string&gt; 隐式转换为Generic.List&lt;string&gt;

目前我可以使用转换

 var result =  from d in this.ObjectContext.vwBusinessUnits
                         select d.BusinessLineID;
            return result.Distinct().ToList();  

我正在尝试在视图模型中使用此结果,但出现转换错误

 private void LoadBUGroupTags()
    {
        TagsData = SecurityDomainContext.Current.GetDataForTags();
    }

错误 1 ​​无法隐式转换类型 'System.ServiceModel.DomainServices.Client.InvokeOperation>' 至 'System.Collections.Generic.List'

TagsData 只是一个公共属性

public List<string> TagsData 
        {
            get 
            {
                return _tags;
            }
            set
            {
                if (_tags != value)
                {
                    _tags = value;
                 OnNotifyPropertyChanged("TagsData");
                }
            }
        }

【问题讨论】:

    标签: c# silverlight wcf linq casting


    【解决方案1】:

    目前还不清楚所涉及的类型是什么 - 但 d.BusinessLineID 是一个字符串,那么你最终会得到一个 IQueryable&lt;IEnumerable&lt;char&gt;&gt; 这不是你想要的。

    怀疑你想要:

    var result =  from d in this.ObjectContext.vwBusinessUnits
                  select d.BusinessLineID;
    return result.Distinct().ToList();
    

    不带查询表达式的写法更简单(IMO):

    return this.ObjectContext.vwBusinessUnits
               .Select(d => d.BusinessLineID)
               .Distinct()
               .ToList();
    

    【讨论】:

    • @dknaack:还没回来——在克利夫兰机场等待。是的,我和斯科特一起录制了一个播客。看到这条推文,但认为如果你已经接受了答案,你会很高兴 - 如果不是这样,请告诉我。
    • 我仍然收到从 Generic IEnumerable> 到 Generic.List 的隐式转换类型错误。列表 Temp = SecurityDomainContext.Current.GetDataForTags();
    • @stevenjmyu:你到底是从哪里得到这个错误的?如果它在 calling 代码中,您是否确定 GetDataForTags 真的被声明为返回List&lt;string&gt; 而不是IEnumerable&lt;string&gt;?如果您包含完整的错误(使用剪切和粘贴 - 看起来您现在刚刚重新输入了错误,有一些错误)包括它指向的行,将会有所帮助。
    【解决方案2】:

    使用ToList 方法。这需要 IEnumerable ,它本质上就是 var ,并将其放入列表中。还有一个 ToArray 方法(仅供参考)。

    编辑:

    另一个选项是创建一个传入 var 变量的新列表。 Details.

    【讨论】:

      【解决方案3】:
        var result =  (from d in this.ObjectContext.vwBusinessUnits 
                      select d.BusinessLineID).Distinct().ToList(); 
      
         return result; 
      

      【讨论】:

        【解决方案4】:

        为了获得字符串列表的结果,您应该在获取列表之前将业务线转换为字符串:

        
        var result = this.ObjectContext.vwBusinessUnits.Select(x=>x.BusinessLineID.ToString()).Distinct();
        
        完成此操作后,您可以将结果作为字符串
        
        var resultList = result.ToList();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          相关资源
          最近更新 更多