Linq小例子

本文详细介绍了如何使用LINQ技术与数据库交互,包括建立连接、查询数据、执行SQL命令、连接查询、自身增删改操作等核心步骤。通过实例演示了如何使用LINQ查询并展示数据,以及如何对数据库进行增删改操作。

1使用前先先建linq类,然后创建连接托表过来

2创建连接字符串DBTestConnectionString,添加表后自动已经添加,这里设置好一个字符串变量接收
static string Constr = ConfigurationManager.ConnectionStrings["DBTestConnectionString"].ToString();

3创建LinqDataDataContext,其中LinqData是你创建的linq类的名字
    LinqDataDataContext linq = new LinqDataDataContext(Constr);

然后使用linq语句查询
var value = from v in linq.用户表
                    select v;
        GridView1.DataSource = value;
        GridView1.DataBind();

4或者使用linq.ExecuteCommand(sql)>0 执行sql语句命令
或 IEnumerable<类> restult = linq.ExecuteQuery<类>(sql);进行查询
 迭代器只能查询一列

5连接查询

 var value = from v in linq.新闻表
                    join t in linq.新闻类别表 on v.新闻类别 equals t.id into x
                    select new
                    {
                        v.ID,
                        v.新闻类别表.typename,
                        v.新闻标题,
                        v.PubTime,
                        v.PubPerson,
                        v.新闻内容,
                        v.IsShown
                    };
        GridView1.DataSource = value;
        GridView1.DataBind();

 


6自身增删改

增加记录:
用户表 user=new 用户表 ();
        user.UserName = txtname.Text.Trim();
        user.MyPwd = txtpwd.Text.Trim();
        linq.用户表.InsertOnSubmit(user);
        linq.SubmitChanges();
        bind();  

删除记录
var value = from v in linq.用户表
                    where v.ID == Convert.ToInt32(txtid.Text.Trim())
                    select v;
        linq.用户表.DeleteAllOnSubmit(value);
        linq.SubmitChanges();
        bind();

更新记录
var value = from v in linq.用户表
                    where v.ID == Convert.ToInt32(txtid.Text.Trim())
                    select v;
        foreach (用户表 user in value)
        {
            user.UserName = txtname.Text;
            user.MyPwd = txtpwd.Text;
        }
        linq.SubmitChanges();       
        bind();

<think>我们正在处理一个关于在C#中使用LINQ操作DataTable的查询。根据提供的引用,特别是引用[2]和引用[4],我们有一些示例代码片段。引用[2]展示了使用Where子句和Containes方法(注意:这里可能有拼写错误,应为Contains)来筛选DataTable中的行,并遍历结果。引用[4]展示了一个类似SQL的查询语法,用于选择满足条件的行的特定列。此外,引用[3]提供了一个读取CSV文件到DataTable的示例,这可能有助于我们构建一个完整的示例,因为通常我们需要先有一个DataTable才能进行LINQ查询。需要注意的是,LINQ查询要求DataTable的Rows集合需要被转换为可枚举的类型,并且我们可以使用Field<T>扩展方法来访问列的值。我们将提供以下内容:1.一个完整的示例,包括创建或加载DataTable(为了示例,我们可能使用一个简单的内建DataTable)。2.使用两种LINQ查询方式:类似SQL的查询语法和方法语法。3.遍历查询结果。注意:引用[2]中的代码是直接对DataTable使用Where,但实际上,我们需要使用AsEnumerable()来将DataTable转换为IEnumerable<DataRow>,这样LINQ才能使用。因此,我们将展示:-一个示例DataTable的创建(包含几列,例如CustomerID,CustomerName,Country等)。-使用查询语法的LINQ示例(如引用[4])。-使用方法语法的LINQ示例(如引用[2])。我们也会注意,LINQtoDataSet需要引用System.Data.DataSetExtensions和System.Linq。下面是一个完整的示例代码:</think> ### C#中使用LINQ操作DataTable的示例代码 以下是使用LINQ操作DataTable的三种常见方式,结合了**查询语法**和**方法语法**: #### 1. 基本查询(查询语法) ```csharp // 创建示例DataTable DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Country", typeof(string)); dt.Rows.Add(1, "John Smith", "USA"); dt.Rows.Add(2, "Maria Garcia", "Spain"); dt.Rows.Add(3, "John Doe", "Canada"); // LINQ查询:查找所有美国客户(查询语法) var query = from row in dt.AsEnumerable() where row.Field<string>("Country") == "USA" select row.Field<string>("Name"); foreach (string name in query) { Console.WriteLine(name); // 输出:John Smith } ``` #### 2. 条件筛选(方法语法) ```csharp // 查找包含"John"的客户(方法语法)[^2] var johnCustomers = dt.AsEnumerable() .Where(row => row.Field<string>("Name").Contains("John")) .Select(row => new { ID = row.Field<int>("ID"), FullName = row.Field<string>("Name") }); foreach (var cust in johnCustomers) { Console.WriteLine($"ID:{cust.ID}, Name:{cust.FullName}"); // 输出: // ID:1, Name:John Smith // ID:3, Name:John Doe } ``` #### 3. 多表连接查询 ```csharp // 创建订单表 DataTable orders = new DataTable(); orders.Columns.Add("OrderID", typeof(int)); orders.Columns.Add("CustomerID", typeof(int)); orders.Columns.Add("Amount", typeof(decimal)); orders.Rows.Add(101, 1, 199.99m); orders.Rows.Add(102, 3, 299.50m); // 连接客户表和订单表 var joinQuery = from cust in dt.AsEnumerable() join ord in orders.AsEnumerable() on cust.Field<int>("ID") equals ord.Field<int>("CustomerID") select new { OrderID = ord.Field<int>("OrderID"), CustomerName = cust.Field<string>("Name"), Amount = ord.Field<decimal>("Amount") }; foreach (var item in joinQuery) { Console.WriteLine($"{item.OrderID}: {item.CustomerName} - ${item.Amount}"); // 输出: // 101: John Smith - $199.99 // 102: John Doe - $299.50 } ``` ### 关键要点: 1. **`AsEnumerable()`转换**:必须先将DataTable转换为`IEnumerable<DataRow>`才能使用LINQ 2. **`Field<T>()`方法**:类型安全的列值访问(替代row["列名"]语法) 3. **延迟执行**:LINQ查询实际执行发生在第一次迭代时[^1] 4. **匿名类型**:可使用`select new {...}`创建临时结果对象 5. **关联数据**:可无缝连接多个DataTable实现类SQL的JOIN操作 > 注:使用前需添加命名空间: > ```csharp > using System.Data; > using System.Linq; > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值