LINQ实体结果到列表<;字符串>;

本文关键字:lt 字符串 gt 列表 实体 结果 LINQ | 更新日期: 2023-09-27 18:20:11

我有一个查询,它只返回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<string>隐式转换为Generic.List<string> 的错误

目前我可以使用进行转换

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

LINQ实体结果到列表<;字符串>;

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

我怀疑你想要:

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

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

编辑:

另一个选项是创建一个传递var变量的新列表。详细信息。

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

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


var result = this.ObjectContext.vwBusinessUnits.Select(x=>x.BusinessLineID.ToString()).Distinct();
完成此操作后,您可以获得字符串形式的结果

var resultList = result.ToList();