如果需要更多的信息请告诉我。
有人可以看看我的代码,我认为必须有一种方法来优化每段代码?
我有一个数据库与Artists
,每个艺术家有多个歌曲标题(称为Titles
),每个标题可以有多个Meanings
。
Artist [1..*] Title [1..*] Meaning [0..*]
我想找到Meanings
的计数,每Title
,为Artist
,并返回它作为一个新的ViewModel列表。
public class TitleVM
{
public int TitleID { get; set; }
public int MeaningCount { get; set; }
}
public List<TitleVM> GetTitlesByArtistID(int artistID)
{
//find the artist by ID
var titles = context.Titles.Where(x => x.ArtistID == artistID);
//create new VMList to be returned
var titleVMList = new List<TitleVM>();
//loop through each title,
foreach (var item in titles)
{
//find the number of meanings,
var count = 0;
if (item.Meanings != null && item.Meanings.Count > 0)
{
count = item.Meanings.Count();
}
// and map it to VM, add to list
titleVMList.Add(new TitleVM
{
TitleID = TitleID,
MeaningCount = count
});
}
return titleVMList;
}
我认为映射它将是最简单的,但不知道如何以这种方式映射一个视图模型与列表。在我的项目中,我使用Omu。valueinjector用于映射基本模型,因为Automapper需要完全信任才能运行,而我的主机不允许。
好的,我读到最好是做一个。adrange,而不是每次都用。add添加项目。我的代码如下:
public int CountMeanings(IEnumerable<Meaning> meanings)
{
if (meanings != null && meanings.Count() > 0)
return meanings.Count();
return 0;
}
public List<TitleVM> GetTitlesByArtistID(int artistID)
{
var titleVMList = new List<TitleVM>();
var titles = context.Titles.Where(x => x.ArtistID == artistID).AsEnumerable();
titleVMList.AddRange(titles.Select(item => new TitleVM {
TitleID = item.TitleID,
MeaningCount = CountMeanings(item.Meanings)
}));
return titleVMList;
}