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

时间:2014-08-24 16:33:55

标签: c# linq lambda

我正在使用这个linqQuery重新列出一个博客帖子列表

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

在我的课堂上,我有一个名为Description的字符串属性,包含很长的文本。 我的问题是,我如何在linqQuery中包含一些代码,说它应该只返回public string Description { get; set; }

中的前20个字母

3 个答案:

答案 0 :(得分:4)

这样的事情应该有效:

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

答案 1 :(得分:3)

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

答案 2 :(得分:3)

如果你只想要简短的描述,你可以做更多的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))
}