在linqQuery中只返回字符串的一部分

本文关键字:字符串 一部分 返回 linqQuery | 更新日期: 2023-09-27 18:19:13

我有这个linqQuery返回一个博客文章列表

var blogPosts = _repo.GetPosts().OrderByDescending(o => o.PostedOn).Take(25).ToList();

在我的类中,我有一个名为Description的字符串属性,它包含一个很长的文本。我的问题是,我怎么能在linqQuery包括一些代码,说它应该只返回前20个字母从我的public string Description { get; set; }

在linqQuery中只返回字符串的一部分

应该这样做:

var blogPosts = _repo
         .GetPosts()
         .OrderByDescending(o => o.PostedOn)
         .Take(25)
         .AsEnumerable()
         .Select(x => new BlogPost 
                      { 
                         Description = x.Description.Substring(0, 20)),
                         // set other properties
                      });

如果你只想要简短的描述,你可以做更多的LinQ:

var shortenedDescriptions = blogPosts.Select(post => post.Description)
                                     .Select(s => s.Substring(0, Math.Min(s.Length, 20))).ToList();

如果你想优化它,你可以一次做两个选择。

如果你想用缩短的描述,你需要一个循环:

foreach(var post in blogPosts)
{
   post.Description = post.Description.Substring(0, Math.Min(s.Length, 20))
}
var blogPosts = _repo.GetPosts()
    .OrderByDescending(o => o.PostedOn)
    .Take(25)
    .ToList()
    .Select(x=>new 
    { 
        x...., //other needed properties
        Description = x.Description.Substring(0,20)
    });