将带有列重命名结果的 Linq 方法添加到视图模型

本文关键字:添加 方法 视图 模型 Linq 重命名 结果 | 更新日期: 2023-09-27 17:58:13

我通过带或不带 .select(( 方法,只要我只选择一列。当我尝试使用 .select(( 选项,其中包含重命名的列,如下所示:

var custodians = _custodian.Contacts
    .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS")))
    .Select(c => new { c.contactid, name = c.lname + ", " + c.fname})
    .ToList(); 

它创建一个System.Collections.Generic.List<<>f__AnonymousType1<int, string>>类型列表

有一个现有的视图模型,我正在传递给我的视图:

public class AssetViewModel
{
    public string PsgcTagNumber { get; set; }
    public string[] AssetAttributes { get; set; }
    public string Message { get; set; }
    public Asset Asset { get; set; }
    public Location Location { get; set; }
    public string Custodian { get; set; }
    public ?????? AllContacts { get; set; }
}

我无法弄清楚的是用于视图模型的AllContacts属性的数据类型。

有人指出我正确的方向吗?

将带有列重命名结果的 Linq 方法添加到视图模型

你需要定义一个类。

public class Contact {
    public int contactid {get;set;}
    public string name {get;set;}
}
.Select(c => new Contact { contactid = c.contactid, name = c.lname + ", " + c.fname})
public Contact[] AllContacts { get; set; }

或者干脆不理会实体,而不对查询执行Select方法,并在视图模型中使用它 - 您可以添加 FormattedName 属性或类似的东西来处理您的名称。

您的匿名类型结果正是您选择的new { c.contactid, name = c.lname + ", " + c.fname}生成的 - int<->字符串列表或{ int contactid, string name }列表如果你想使用一个现有的模型,就像你的AssetViewModel.AllContacts你需要先定义它的类型,如@Joe Enos所述,然后稍微更新你的查询:

var vm = new AssetViewModel
{
   PsgcTagNumber =...,
   ...,
   Custodian =...,
   AllContacts = _custodian.Contacts
                 .Where(c => !(c.personid.StartsWith("RMR") || c.personid.StartsWith("GMS")))
                 .Select(c => new Contact { c.contactid, name = c.lname + ", " + c.fname})
                 .ToList(); 
}

所以你就有了它:你的视图模型,启动并准备向前传递