C# .ToList()在LINQ查询结果中的位置
在获取数据以填充数据网格时,我总是提取数据,制作列表并映射到我的模型,如下所示:C# .ToList()在LINQ查询结果中的位置,c#,asp.net-mvc,C#,Asp.net Mvc,在获取数据以填充数据网格时,我总是提取数据,制作列表并映射到我的模型,如下所示: public List<Person> GetPeople() { var data = _db.Person.ToList(); List<Person> People = new List<Person>(); foreach (var item in data) { P
public List<Person> GetPeople()
{
var data = _db.Person.ToList();
List<Person> People = new List<Person>();
foreach (var item in data)
{
Person person = new Person()
{
PersonId = item.PersonID,
FirstName = item.FirstName,
LastName = item.LastName
};
People.Add(person);
}
return People;
}
public List GetPeople()
{
var data=_db.Person.ToList();
列表人员=新列表();
foreach(数据中的var项)
{
Person=新人()
{
PersonId=item.PersonId,
FirstName=item.FirstName,
LastName=item.LastName
};
人。添加(人);
}
还人,;
}
这很好,但为了减少代码编写量,我发现了.Select方法和(我认为是)匿名类型。所以现在我有:
public List<Person> GetPeople()
{
return _db.Person.Select(d => new Person
{
PersonId = item.PersonID,
FirstName = item.FirstName,
LastName = item.LastName
}).ToList();
}
public List GetPeople()
{
return _db.Person.Select(d=>newperson
{
PersonId=item.PersonId,
FirstName=item.FirstName,
LastName=item.LastName
}).ToList();
}
虽然它不容易阅读,但它也很好用。两种方式都有偏好吗?在大多数情况下,第二种方式更可取。主要区别在于:
人员
表相当大,则可能会出现此问题\u db.Person
之后没有ToList()
,则这两种方法实际上是相同的
并且您没有创建匿名类型,因为您指定了类型(Person
)。要创建匿名类型,您只需使用new{…properties…}
虽然读起来不那么容易
我认为,一旦你习惯了像
Select
这样的Linq语句,你就会发现它非常容易阅读。出于几个原因,Select方法是首选的
仅供参考
newperson
->非匿名类型。“虽然它不容易阅读,但也很好用”-在什么方面它不容易阅读?在我看来这更自然。。。你得到的每一段代码都表达了你想要的东西——源代码、你想对每个人进行的转换,最后是对列表的转换。你为什么要从一个现有的person
对象创建一个新的person
对象?你只是“截断”到这三列吗?我的想法是,一个人员列表应该用人员填充,所以我创建一个新的列表,然后创建一组新的人员加入其中。不确定这是否有意义。第二个例子会改变你的投影,甚至还有副作用。。。对象不会“保存”到EF和其他类似文件中的上下文中ORMs@xanatos这是一个很好的观点-我添加了一条注释,询问OP是否需要创建新对象。