不允许在查询中显式构造实体类型

本文探讨了在使用Linq进行数据库查询时遇到的错误,特别是当查询结果需映射到包含实体类对象的自定义实体类时。提供了两种解决方案,一种是通过匿名实体类型并转换为所需实体类,另一种是直接在查询中创建自定义实体实例。

错误原因:

1     from f in context.TableName
2     select new MyModel()
3     {
4         Id = f.Id
5     };

select new语句中如果指定linq自动生成的实体类并且实体类中有实体类对象,就会产生错误

用以下的代码可解决:

方法一:

注意:select new的是匿名实体,只能用匿名实体,后面代码会转换回相应实体

 

 1 IQueryable query = from f in context.TableName
 2                                        join c in context.tableName_2
 3                                        on f.NutrientId equals c.Id
 4                                        where f.ContentId == ContentId
 5                                        select new
 6                                        {
 7                                            Id = f.Id,
 8                                            ContentId = f.ContentId,
 9                                            NutrientId = f.NutrientId,
10                                            OrderValue = f.OrderValue,
11                                            ContainNum = f.ContainNum,
12                                            Remark = f.Remark
13                                        };
14                     using (context.Connection)
15                    {
16                         DbCommand command = context.GetCommand(query);
17                         if (context.Connection.State == ConnectionState.Closed)
18                         {
19                             context.Connection.Open();
20                         }
21                         using (DbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
22                         {
23                             result = context.Translate<MyModel>(reader).ToList();
24                         }
25                     }

 

方法二:

自定义实体类,属性CookBookAttr是实体类对象,是可行的

 1 IList<FoodMaterialNutrient> aa = (from f in context.tablename_1
 2                               join c in context.tablename_2 on f.NutrientId equals c.Id
 3                               where f.ContentId == ContentId
 4                               select new MyModel()
 5                               {
 6                                   Id = f.Id,
 7                                   OrderValue = f.OrderValue,
 8                                   Remark = f.Remark,
 9                                   ContainNum = f.ContainNum,
10                                   AttributeName = c.AttributeName,
11                                   Unit = c.Unit,
12                                   CookBookAttr = c
13                               }).ToList();

转载于:https://www.cnblogs.com/hongbi/archive/2012/09/18/2690100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值