我有以下代码:

using (DBContext context = new DBContext())
{
    myCollection = context.Items.Where(i => i.Type == 1).OrderBy(k => k.Name).Select(w => new
    {
        Alias = w.Name + string.Format("{0}", w.Id),
        Name = w.Name
    }).ToArray();
}

在运行时,尝试连接字符串并将con将整数w.Id转换为字符串时出现错误。

错误提示:



还不支持加号“+”。

我已经通过引入AsEnumerable解决了这个问题:
using (DBContext context = new DBContext())
{
    myCollection = context.Items.AsEnumerable().Where(i => i.Type == 1).OrderBy(k => k.Name).Select(w => new
    {
        Alias = w.Name + string.Format("{0}", w.Id),
        Name = w.Name
    }).ToArray();
}

但我想知道这是否是最佳解决方案,或者还有另一种更适合这样做的方法。有想法吗?

最佳答案

代码的一种优化方法是在AsEnumerable()方法之后使用Where。如果不是,则从存储中返回每个实体,并使用LINQ to Objects检查整个表。通过对代码的简单修改,可以让where子句在sql上运行,并从存储中检索较少的记录。一般规则是首先放置由LINQ提供程序实现的所有查询子句。

using (DBContext context = new DBContext())
{
    myCollection = context.Items.Where(i => i.Type == 1)
       .AsEnumerable().OrderBy(k => k.Name).Select(w => new
        {
            Alias = w.Name + string.Format("{0}", w.Id),
            Name = w.Name
        }).ToArray();
}

10-06 05:25
查看更多