这可能吗?我试图避免很多区域之间的复制和粘贴。我有一个搜索功能(为简化起见,我减少了代码)。
if (!String.IsNullOrEmpty(filterVM.searchString))
{
var nameSearch = filterVM.searchString.ToLower();
guests = guests.Where(g => g.FirstName.ToLower().StartsWith(nameSearch)
|| g.LastName.ToLower().StartsWith(nameSearch)
)
}
filterVM.FilteredResultsCount = guests.CountAsync();
来宾可以随区域而变化,但是它始终具有相同的基本内容,例如FirstName和LastName, 例如:
public class GuestBasicBase
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string GuestGuid { get; set; } = Guid.NewGuid().ToString();
public string FirstName { get; set; }
public string LastName { get; set; }
}
然后我可以针对
这样的特定区域开设更大的课程 public class AreaOneGuest : GuestBasicBase
{
public int ID {get; set;}
public string ExtraFieldOne { get; set; }
public string ExtraFieldTwo { get; set; }
//Etc
}
我想拥有一个将返回视图模型的函数,该视图模型的一部分是PaginatedList,另一部分是Filter参数,如下所示:
public class GuestBasicBaseIndexVM
{
public PaginatedList<T:GuestBasicBase> Guests { get; set; }
public GuestIndexFilterVM FilterVM { get; set; }
}
我想要一个函数返回此值,但要使用更大的字段,例如
public async Task<GuestBasicBaseIndexVM>(T:GuestBasicBase, GuestIndexFilterVM filterVM){
//do search function
return (T where T: GuestBasicBase)
}
这个问题有意义吗,可能吗?目前,我自己尝试一下,看看会发生什么...我觉得这有点像PaginatedList
类,但是我不确定
答案 0 :(得分:0)
并不是我想要的,但这就是我所做的。像这样更改了我的BaseViewModel:
public class GuestBasicBaseIndexVM
{
public IEnumerable<GuestBasicBase> Guests { get; set; }
//Changed from a PaginatedList
public GuestIndexFilterVM FilterVM { get; set; }
}
和此功能:
public static async Task<GuestBasicBaseIndexVM> CreateUpdatedGuestList(GuestIndexFilterVM filterVM, IQueryable<GuestBasicBase> guests)
{
//Code to search through guests and return filtered list and filters viewmodel
}
然后,当我将基本客人的身份归还后,我执行了此操作以将他们重新连接到AreaOne客人
var x = await Helpers.CreateUpdatedGuestList(filterVM, guests);
var hsIDs = x.Guests.Select(v => v.GuestGuid).ToHashSet(); //Filtered GuestGuids to hashset
areaOneGuests = guests.Where(g => hsIDs.Contains(g.GuestGuid)) //This matches up the filtered list of base guests to the actual full guests.
//Then whatever code to do what I want with the AreaOne Guests....
这并不是我要尝试做的,但是仍然为我节省了大量使用相似的基本Guest类从一个区域复制到另一个区域的麻烦。用这种方法无法衡量任何明显的性能损失/增益。