下面的代码无法运行,因为它抱怨我正在尝试将类型Anon添加到客户端类型中。在最初投影某些结果并丢失原始 Type 后,如何将某些结果存储在另一个变量中。
(附言。我使我的例子变得简单,但实际上正在处理更复杂的情况。在我的实际情况中,不投影不是一种选择。已编辑以提供澄清。
var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
.Select(c => new {
LastName = c.LastName.ToUpper(),
c.DateAdded,
c.FirstName,
})
.ToList();
var certainClients = new List<Clients> { };
foreach (var client in clients)
{
if(client.DateAdded.Date < DateTime.Today) {
certainClients.Add(client);
}
}
certainClients.Dump();
有两个选项。
第一。不要使用 anon 数据类型,而是使用Clients
数据类型。实际上,您正在创建Clients
对象 -
var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
.Select(c => new Clients{
LastName = c.LastName.ToUpper(),
c.DateAdded,
c.FirstName,
})
第二。 创建一个object
列表并为其分配任何自定义/匿名数据类型 -
var certainClients = new List<object> { };
最佳方法是投影到自定义业务实体类。 这意味着我们实际上自己定义了类。例如。
public class ClientEntity
{
public string LastName;
public DateTime DateAdded;
// etc for custom fields or properties you want
}
然后我们可以简单地投影到我们的定制类
var clients = Clients.Where(c => c.FirstName.StartsWith("Mark"))
.Select(c => new ClientEntity{
LastName = c.LastName.ToUpper(),
DateAdded = c.DateAdded,
etc
})
这样,它避免了List <object>
不是类型安全的,并且不需要与原始客户端类相似,例如,如果我们想要原始名称的长度。