linq – 实体框架首先选择没有.ToList()的新POCO
发布时间:2020-12-12 16:46:52 所属栏目:MsSql教程 来源:网络整理
导读:我正在创建一个带有服务层(WCF网站)和Silverlight 4客户端的应用程序. RIA服务不是一个选择,所以我们创建中介类来传递.为了这个问题的目的,我们假设我来回传统美味食物. public class FoodData{ public int Id { get; set; } public string Name { get; set;
我正在创建一个带有服务层(WCF网站)和Silverlight 4客户端的应用程序. RIA服务不是一个选择,所以我们创建中介类来传递.为了这个问题的目的,我们假设我来回传统美味食物.
public class FoodData { public int Id { get; set; } public string Name { get; set; } public Tastyness TastyLevel { get; set; } } EF模型基本上是同一个类,一个有三个基本字段的表(Tastyness是一个对应于我们的枚举Tastyness的int). 进行Entity Framework查询时,我发现自己使用这种语句很多: public List<FoodData> GetDeliciousFoods() { var deliciousFoods = entities.Foods .Where(f => f.Tastyness == (int)Tastyness.Delicious) .ToList() // Necessary? And if so,best performance with List,Array,other? .Select(dFood => dFood.ToFoodData()) .ToList(); return deliciousFoods; } 没有.ToList()调用我收到一个异常关于LINQ无法将自定义方法转换为等效的查询,据了解. 我的问题是关于在.Select(…)之前使用自定义扩展名调用.ToList()来将我们的对象转换为Food对象的POCO版本. 有没有更好的模式在这里做,或者甚至可能更好的替代.ToList()可能会更加性能,因为我不真的要求列表的功能.结果. 解决方法使用ToList或AsEnumerable的问题是实现整个实体并支付修复费用.如果你想有最好的SQL返回只需要的字段,那么你应该直接投资,而不是使用.ToFoodData():var deliciousFoods = entities.Foods .Where(f => f.Tastyness == (int)Tastyness.Delicious) .Select(dFood => new FoodData { Id = dFood.Id,Name = dFood.Name,TastyLevel = (Tastyness)dFood.Tastyness }); 该枚举可能是一个问题.如果是,请通过匿名类型: var deliciousFoods = entities.Foods .Where(f => f.Tastyness == (int)Tastyness.Delicious) .Select(dFood => new FoodData { Id = dFood.Id,TastyLevel = dFood.Tastyness }) .AsEnumerable() .Select(dFood => new FoodData { Id = dFood.Id,TastyLevel = (Tastyness)dFood.TastyLevel }); 如果您检查生成的SQL,您将看到它更简单,并且您不需要将对象修复到ObjectContext中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |