将带有列重命名结果的 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属性的数据类型。
有人指出我正确的方向吗?
你需要定义一个类。
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();
}
所以你就有了它:你的视图模型,启动并准备向前传递