我在尝试优化/重构LINQ to Entities查询时遇到了一些问题。这是我现在拥有的:
public List<Article> LastFive()
{
return _siteDB.Articles.OrderByDescending(a => a.LastModified).Take(5).ToList();
}
我想做的是,我想简单地获取最近五篇文章的标题和ID,而不是返回最近五篇文章的列表。如果可能的话,我想保持链接完整的方法(从风格的角度来看我喜欢它),但是我不确定使用方法链接为Select()
添加什么。我也不确定将什么作为我的方法的返回值,因为我不会返回完整的文章实体,而只返回它们中的选定属性。 List<IQueryable>
?
答案 0 :(得分:1)
最好创建一个类型化的类:
public class ArticlePreview
{
public int ID {get;set;}
public string Title {get;set;}
}
然后:
public List<ArticlePreview> LastFive()
{
return _siteDB.Articles.OrderByDescending(a => a.LastModified)
.Take(5).Select(a => new ArticlePreview(){ Title = a.Title,
ID = a.ID })
.ToList();
}
或者,由于您使用的是C#4.0,因此可以选择要返回的属性:
public static List<dynamic> LastFive(Func<Article, dynamic> func)
{
return _siteDB.Articles.OrderByDescending(a => a.LastModified)
.Take(5).Select(a => func(a)).ToList();
}
使用它:
var articlePreviews = LastFive(a => new { a.Title, a.ID });
//articlePreviews[0].Title
//articlePreviews[0].ID
答案 1 :(得分:1)
您应该返回一个实际类的List,但是只包含您需要的属性的类。
public class ArticleTitle
{
public string Title { get; set; }
public int ID { get; set; }
}
以便您的查询变为:
public List<ArticleTitle> LastFive()
{
return _siteDB.Articles.OrderByDescending( a => a.LastModified )
.Select( a => new ArticleTitle
{
Title = a.Title,
ID = a.ID,
})
.Take( 5 )
.ToList();
}