仅返回Entity Framework类中的指定属性

时间:2016-05-20 16:39:44

标签: c# xml asp.net-mvc entity-framework

我对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的格式返回对象的某些属性?

2 个答案:

答案 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类型(因为如果我理解你需要的话)

*此外,您将人声明为可枚举,但您正在向其返回一个列表