使用非数据库属性创建PagedList

时间:2015-08-27 09:33:33

标签: c# asp.net-mvc linq viewmodel pagedlist

使用以下模型:

public class Person
{
    public int PersonId { get; set; }

    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Middle Name(s)")]
    public string MiddleNames { get; set; }

    public string Surname { get; set; }

    public string Name
    {
        get
        {
            List<string> name = new List<string>();
            name.Add(this.FirstName);
            name.Add(this.MiddleNames);
            name.Add(this.Surname);
            return String.Join(" ", name.Where(n => !String.IsNullOrEmpty(n)));
        }
    }
}

我想创建一个PagedList的视图模型,如下所示:

public class PersonSearch
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}

最有效的方法是什么?

我不能使用下面的内容,因为它在Name上给出了一个错误,这是预期的

var model = db.person.OrderBy(p => p.Surname)
                    .ThenBy(p => p.FirstName)
                    .Select(p => new PersonSearch
                    {
                        PersonId = p.PersonId,
                        Name = p.Name
                    })
                    .ToPagedList(page, 25);
  

LINQ to Entities

中不支持指定的类型成员“Name”

以下有效,但它首先涵盖了整个人员名单:

var model = db.person.OrderBy(p => p.Surname)
                    .ThenBy(p => p.FirstName)
                    .ToList()
                    .Select(p => new PersonSearch
                    {
                        PersonId = p.PersonId,
                        Name = p.Name
                    })
                    .ToPagedList(page, 25);

以下内容不起作用,因为它删除了分页信息:

var model = db.person.OrderBy(p => p.Surname)
                    .ThenBy(p => p.FirstName)
                    .ToPagedList(page, 25);
                    .Select(p => new PersonSearch
                    {
                        PersonId = p.PersonId,
                        Name = p.Name
                    })
                    .ToPagedList(page, 25);

1 个答案:

答案 0 :(得分:0)

<?php class Apple { public function showColor() { return $this->color; } } class Banana { public $color; public function __construct() { $this->color = "Banana is yellow"; } public function GetColor() { $apple = new Apple(); return $apple->showColor(); } } $banana = new Banana; var_dump($banana->GetColor()); ?> 模型中添加构造函数,以便生成全名

PersonSearch

然后在您的查询中使用

public class PersonSearch
{
  public PersonSearch()
  {
  }
  public PersonSearch(string first, string middle, string last)
  {
    // format and remove leading or trailing white space as a result of nulls
    string name = string.Format("{0} {1} {2}", first, middle, last).Trim();
    // remove any internal extra white space if middle is null
    if (string.IsNullOrWhiteSpace(middle))
    {
      name = String.Join(" ", name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
    }
    Name = name;
  }
  public int PersonId { get; set; }
  public string Name { get; set; }
}