我对Entity Framework和MVC(还在学习C#)都很陌生,所以如果我的某些术语不在这里,请原谅我。
简单地说,我已经在我的MVC项目中安装了Entity Framework,我希望用它来创建一个Web API来提供XML记录列表。实体框架创建了我的实体类。
在我的控制器中,我可以使用以下代码获取XML列表:
public IEnumerable<Person> GetAllPersons()
{
IEnumerable<Person> person;
using (var context = new ContactsContext())
{
context.Configuration.ProxyCreationEnabled = false;
person = context.People.ToList();
}
return person;
}
这很棒。但是,如果我只想返回Person对象的某些属性呢?如果我只想要,例如,FirstName和LastName属性怎么办?
我找到了使用像
这样的例子person = (from p in context.People
select new { p.FirstName, p.LastName })
但这会带来问题。这样做意味着我的IEnumberable列表不再是类型Person
的列表。如果我将类型更改为dynamic
它至少会编译,但问题是它没有成功显示在浏览器中,可能是因为XML反序列化器不再知道对象的结构是什么。
是否真的没有办法只返回我指定的对象的某些属性,同时仍然传达这样一个事实:它实际上是一个Person
对象,我正在返回?如果没有,我将如何以浏览器可以解释为XML的格式返回对象的某些属性?
答案 0 :(得分:1)
你可以这样做:
List<Person> persons = (from p in context.People
select new { FName = p.FirstName, LastName = p.LastName })
.ToList()
.Select(p=>new person() { FirstName= FName , LastName = LName });
答案 1 :(得分:0)
List<Person> person = context.People.AsEnumerable()
.Select(o => new Person {
FirstName = o.FirstName ,
LastName = o.LastName
}).ToList();
这样你就可以确定你的列表属于Person类型(因为如果我理解你需要的话)
*此外,您将人声明为可枚举,但您正在向其返回一个列表