我有以下代码:
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();
}