我对LINQ不熟悉,如果我的问题很愚蠢,那就很抱歉。
我需要从数据库中检索一些值并将它们放在textBoxes中。只是。类似下面的代码,但使用LINQ:
编辑:实际上,我想要检索多个字段。像那样:
SqlDataReader dr = new functionThatReturnsDataReader();
if (dr.HasRows) {
dr.Read();
txtId = dr["Id"].ToString();
txtName = dr["Name"].ToString();
}
我找到了this solution online:
IDbCommand command = dc.GetCommand(query);
command.Connection = dc.Connection;
command.Connection.Open();
IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
然而,如果我把它与标准的executeReader混合在一起,似乎我正在扔掉LINQ所代表的一切。没有理由构建数据上下文和查询,并像ADO一样执行它们。
如何在不使用IDbCommand和IDataReader的情况下实现相同目标?
答案 0 :(得分:1)
我认为您需要从数据库中创建LINQ to SQL类: http://msdn.microsoft.com/en-us/library/bb384428.aspx
然后你可以像对象一样对待数据库表并用linq查询...没有你想要运行的查询的细节,我不能为你构造linq查询,但是创建DBML文件是第一个步骤
答案 1 :(得分:1)
在将LINQ(或实体框架或其他ORM)解决方案与ADO.NET解决方案进行比较时要考虑的一件事是,ORM通常是强类型的。这意味着您需要将面向对象的原则应用于它们。
如果你在同一个函数中处理上下文,查询和结果,你可以这样做:
using(var context = new YourContext())
{
txtId.Text = (from t in context.YourTable
where t.Conditions
select t.Id).FirstOrDefault();
}
如果他们没有相同的功能(实际上,他们不应该),那么这样的事情会有效:
string FunctionThatReturnsId()
{
using(var context = new YourContext())
{
return (from t in context.YourTable
where t.Conditions
select t.Id).FirstOrDefault();
}
}
...
txtId.Text = FunctionThatReturnsId();
答案 2 :(得分:0)
如果您正在使用实体框架,那么您不需要任何查询只需在文本框中编写ID并点击搜索按钮它将显示该ID的文本框中的所有记录。
EntityFramework_mvcEntities db = new EntityFramework_mvcEntities();
int i =Convert.ToInt32( txtsrch.Text);
Employee p = db.Employees.Find(i);
TextBox1.Text = p.Name;
TextBox2.Text = p.Email;
TextBox4.Text = p.Mobile;
db.SaveChanges();
}
答案 3 :(得分:-1)
var q = from c in context.GetTable<tbl_user>()
where c.user_ID == lbuserid.Text.ToString()
select new
{
c.Username,
c.firstname
};
foreach (var item in q)
{
lbusername.Text = item.Username;
lbfirstname.Text = item.firstname;
}