LINQ Cast可枚举到特定类型的列表

Sam*_*ile 5 c# linq

我正在尝试制定一个LINQ查询来选择列表的子列表,它满足where条件,如下所示:

List<Entities.Base> bases = this.GetAllBases();
List<Entities.Base> thebases = from aBase in bases
                               where aBase.OfficeCD == officeCD
                               select aBase;
Run Code Online (Sandbox Code Playgroud)

Base只是一个实体类:

public string BaseCD { get; set; }
        public string BaseName { get; set; }
        public string OfficeCD { get; set; }
        public DateTime EffectiveDate { get; set; }
        public DateTime ExpirationDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

我收到一个错误"无法将System.Collections.Generic.IEnumerable类型隐式转换为System.Collections.Generic.List

所以我尝试应用Cast运算符但是失败了.我现在看到我不想转换元素的类型.我该如何解决这个问题?谢谢!

Ani*_*Ani 10

这不是一个可以通过"铸造"解决的问题; 您获得的查询结果不是列表 - 它是一个延迟执行的序列,它将根据需要流式传输匹配的项目.您必须实际将这些结果加载到a中List<T>才能实现您的目的.例如,该Enumerable.ToList方法将创建一个新列表,使用查询结果填充它,然后返回它.

一些选择:

var thebases = (from aBase in bases
                where aBase.OfficeCD == officeCD
                select aBase).ToList();

// fluent syntax
var thebases = bases.Where(aBase => aBase.OfficeCD == officeCD)
                    .ToList();

// not a LINQ method - an instance method on List<T>. 
// Executes immediately - returns a List<T> rather than a lazy sequence
var thebases = bases.FindAll(aBase => aBase.OfficeCD == officeCD);

// "manual" ToList()
var theBases = new List<Entities.Base>();
var matchingBases =  from aBase in bases
                     where aBase.OfficeCD == officeCD
                     select aBase;

foreach(var matchingBase in matchingBases)
   theBases.Add(matchingBase);
Run Code Online (Sandbox Code Playgroud)