【问题标题】:Adding Linq method with column rename results to viewModel将具有列重命名结果的 Linq 方法添加到 viewModel
【发布时间】:2016-07-22 21:33:25
【问题描述】:

只要我只选择一个列,我就可以通过带有或不带有 .Select() 方法的视图模型将 Linq 查询结果传递给视图。当我尝试将 .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>> 类型列表

我有一个现有的 viewModel 正在传递给我的视图:

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; }
}

我想不通的是用于 viewModel 的 AllContacts 属性的数据类型。

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

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您需要定义一个类。

    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 属性或类似的属性来处理您的名称。

    【讨论】:

    • 那是我缺少的部分。我已经定义了这个类,只是没有将选择投射到那个类。我试图在选择后投射它。谢谢
    【解决方案2】:

    您的匿名类型结果正是您的选择所产生的 new { c.contactid, name = c.lname + ", " + c.fname} - int 列表string 或 { 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(); 
    }
    

    那么你就有了它:你的视图模型,已启动并准备好向前传递

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2016-01-06
      相关资源
      最近更新 更多