优化foreach语句,创建新的映射Viewmodel列表



有人可以看看我的代码,我认为必须有一种方法来优化每段代码?

我有一个数据库与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;
    }

相关内容

  • 没有找到相关文章

最新更新