Linq 中ExecuteQuery 的调用

dong900512 2010-11-24 12:42:32
代码:
PaymentDataContext payDateBase = new PaymentDataContext();
StringBuilder sql = new StringBuilder();
sql.Append("select top ");
sql.Append(pageSize);
sql.Append(" torder.[orderid] as [orderId],(select sg.[name] from [syn_games_informations] as sg where sg.[id]=torder.[gameid]) as [gameName],");
sql.Append("(select tph.[name] from [t_payment_channels] as tph where tph.[id]=torder.[channelid]) as [channeName],");
sql.Append("torder.[rmb] as [payMoney],torder.[status] as [statu],torder.[createon] ");
sql.Append(" from dbo.[t_payment_orders] as torder ");
sql.Append(" where torder.[payer]=");
sql.Append(currUserId);
if (currentPage > 1)
{
sql.Append(" and ");
sql.Append(" torder.[id]>(select Max(id) from (select top ");
sql.Append(pageSize * (currentPage - 1));
sql.Append(" t.[id] from [t_payment_orders] as t order by t.[id],t.[createon]) as b )");
}
sql.Append(" order by torder.[id],torder.[createon]");
return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList();
问题:
1:payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList() 指定的转换无效
2:如果不转换 在 页面中绑定的时候也是指定的转换无效
(IEnumerable<OrderMsg> orderMsgList = new Passport.Tongcn.Net.Bll.PaymentChannelLogic().GetPageOrderMsgList(2, 1, 72);
GridView1.DataSource = orderMsgList;
GridView1.DataBind();)
该怎么解决。。。
...全文
854 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2010-11-24
  • 打赏
  • 举报
回复
return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList();
=======
return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList<OrderMsg>();
dong900512 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 g_lbz 的回复:]
首先说明一下,你现在的写法不是linqToSql,而是拼凑sql语句。
执行Sql语句,只能通过DataReader单个赋值吧?

linq的写法请参考 http://kb.cnblogs.com/page/42692/
[/Quote]
对 我是拼接的sql 语句 但是 这样返回的是直接对数据库操作返回的对象。。。
g_lbz 2010-11-24
  • 打赏
  • 举报
回复
首先说明一下,你现在的写法不是linqToSql,而是拼凑sql语句。
执行Sql语句,只能通过DataReader单个赋值吧?

linq的写法请参考 http://kb.cnblogs.com/page/42692/
claymore1114 2010-11-24
  • 打赏
  • 举报
回复
你的 DateTime int 等值类型的属性,对应的数据 是不是可能为空NULL,NULL的话 转换会失败
dong900512 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q107770540 的回复:]
你SQL语句中的select后边跟的字段数量及名字和OrderMsg表中的一致么?

IExecuteQuery<T>中T类的字段名必须与sql中SQL语句的列名一样才能填充实体类。
[/Quote]

#region 字段
private string _orderId;//订单号
private string _gameName;//游戏名称
private string _channelName;//支付名称
private int _payMoney;//支付金额
private int _statu;//订单状态
private DateTime _createon;//生成时间
#endregion
//#region 构造函数
//public OrderMsg() { }
//public OrderMsg(string orderId, string gameName, string channelName, int payMoney, int statu, DateTime createon)
//{
// this._orderId = orderId;
// this._gameName = gameName;
// this._channelName = channelName;
// this._payMoney = payMoney;
// this._statu = statu;
// this._createon = createon;
//}
//#endregion
#region 属性
/// <summary>
/// 订单号
/// </summary>
public string OrderId
{
get { return _orderId; }
set { _orderId = value; }
}
/// <summary>
/// 游戏名称
/// </summary>
public string GameName
{
get { return _gameName; }
set { _gameName = value; }
}
/// <summary>
/// 支付名称
/// </summary>
public string ChannelName
{
get { return _channelName; }
set { _channelName = value; }
}
/// <summary>
/// 支付金额
/// </summary>
public int PayMoney
{
get { return _payMoney; }
set { _payMoney = value; }
}
/// <summary>
/// 订单状态
/// </summary>
/// <summary>
public int Statu
{
get { return _statu; }
set { _statu = value; }
}
/// 生成时间
/// </summary>
public DateTime Createon
{
get { return _createon; }
set { _createon = value; }
}
#endregion
这样
q107770540 2010-11-24
  • 打赏
  • 举报
回复
你SQL语句中的select后边跟的字段数量及名字和OrderMsg表中的一致么?

IExecuteQuery<T>中T类的字段名必须与sql中SQL语句的列名一样才能填充实体类。
dong900512 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q107770540 的回复:]
return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList();
=======
return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList<OrderMsg>();
[/Quote]

指定的转换无效。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.InvalidCastException: 指定的转换无效。

源错误:


行 132: }
行 133: sql.Append(" order by torder.[id],torder.[createon]");
行 134: return payDateBase.ExecuteQuery<OrderMsg>(sql.ToString()).ToList<OrderMsg>();
行 135: }
行 136: #endregion


源文件: D:\Works\www.tongcn.net\www.tongcn.net\Passport.Tongcn.Net.Dal\PaymentDataProvider.cs 行: 134

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧