相关疑难解决方法(0)

410
推荐指数
10
解决办法
17万
查看次数

创建空的 IQueryable 列表

我想创建一个空 IQueryable 列表并将其更改为 ToPagedList,我尝试了以下代码:-

IQueryable<VirtualMachine> vm2 = new IQueryable<VirtualMachine>();
vm2.ToPagedList(page, pagesize);
Run Code Online (Sandbox Code Playgroud)

但它会引发以下异常:-

错误 3 新表达式在类型后需要 ()、[] 或 {}

c# entity-framework

6
推荐指数
1
解决办法
4198
查看次数

为什么这个LINQ表达式会破坏我的循环和转换逻辑?

背景

ArticleService 是一个为前端层提供方法以促进后端业务的类.

它的两个基本职责是在持久化数据时将ViewModels(ArticleViewModel)转换为适当的Models(Article),反过来,在获取数据时将模型转换为ViewModel ...所以我经常创建一个构建ViewModel对象的私有方法:

private ArticleViewModel BuildViewModel(Article a)
{
    return new ArticleViewModel { Title = a.Title /* all properties */ }
}
Run Code Online (Sandbox Code Playgroud)

继续,ArticleService提供了一种从数据存储中获取所有文章的方法,将它们作为ViewModels返回:public IEnumerable<ArticleViewModel> All()

调用类使用它如下: var articleViewModels = _articleService.All();

简单吧?

问题:

我最初All()懒得写经典foreach循环:

private IEnumerable<ArticleViewModel> All()
{
    var viewModels = new List<ArticleViewModel>();
    foreach (var article in _db.Articles)
        viewModels.Add(BuildViewModel(article));
    return viewModels;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好 - articleViewModels是所有视图模型的实例化列表.

接下来,我使用ReSharper将此循环转换为LINQ语句以获得性能和漂亮,然后将赋值语句与return语句结合使用.结果:

private IEnumerable<ArticleViewModel> All()
{
    return _db.Articles.Select(article => BuildViewModel(article)).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我调试了LINQ语句并唤醒了野兽:

LINQ to …

c# linq foreach lambda linq-to-entities

3
推荐指数
1
解决办法
523
查看次数