var sName = Request.Form["userName"]; var sPwd = Request.Form["userPwd"]; var fUser = from s in spDB.AccountsInfo where s.LoginName==sName && s.LoginPwd==sPwd select s;
是这样,AccountsInfo是我建好的表(已经有测试数据),也是MVC项目下的一个模型类,Form表单提交过来用户名,密码信息去和数据库中信息比对,有的话提取出这个AccountsInfo对象--
但是获取的fUser不是我期望的结果,请教:我这种写法有问题吗?
调试跟踪到fUser发现fUser是:
SELECT
[Extent1].[AccountID] AS [AccountID],
[Extent1].[LoginName] AS [LoginName],
[Extent1].[LoginPwd] AS [LoginPwd]
FROM [dbo].[AccountsInfo] AS [Extent1]
WHERE ([Extent1].[LoginName] = @p__linq__0) AND ([Extent1].[LoginPwd] = @p__linq__1)
但我sName和sPwd的值都传过来了啊,而且鼠标放到linq语句的sName,sPwd上也有值,为什么跟踪后是@p__linq__0与@p__linq__1?
AccountsInfo 为Model
AccountsInfo fUser = (from s in spDB.AccountsInfo where s.LoginName==sName && s.LoginPwd==sPwd select s).FirstOrDefault();
懂我者,web王也!多谢!
这个方法可能获取的不完整 。http://www.cnblogs.com/QLJ1314/archive/2012/08/04/Linq.html 你看一下 这个是之前我写过的一个小程序,希望对你有所帮助
妍珊同学的小程序已经看过了,学习了--我的问题还是没有解决,有兴趣再看看补充问题,谢谢帮助!
这个语句被翻译成:select * from AccountsInfo where LoginName='...' and LoginPwd='...',
看起来应该是你需要的结果啊~
还可以这样写:var fUser=spDB.AccountsInfo.SingleOrDefault(m=>m.LoginName=sName && m.LoginPwd=sPwd);
这个和上句类似。
使用LingToSql,给你推荐两个工具:LinqPad,Sql Profiler(SQL管理器自带)
多谢老兄推荐的工具!--你的写法和一楼的写法还有我的写法我都有试过,效果一样的,断点跟踪都是我补充提问中显示的语句,可能另有玄机--
谢谢帮助!
@巴维尔: 你提问中补充的语句是正常的。那是参数化的写法。
你的写法没什么问题
主要是你期望的结果,AccountsInfo是否能提供
var fUser = from s in spDB.AccountsInfo where s.LoginName==sName && s.LoginPwd==sPwd select s;
你这样写查询到的是实体模型吧。看你想要什么。可以
select new
{
username=s.对应的字段,
...
}