• C#中.NET 7.0控制台应用使用LINQtoSQL、LINQtoXML


    目录

    一、新建控制台应用和数据库连接

    二、手动添加System.Data.Linq程序包

    三、手动添加System.Data.SqlClient程序包

    四、再次操作DataClasses1.dbml

    五、示例

    1.源码

    2.xml文件


            默认安装的.NET 7.0控制台应用是不支持使用LINQtoSQL、LINQtoXML的。 

            默认安装的.NET Framework控制台应用和窗体应用都支持LINQtoSQL、LINQtoXML类的。

           .NET Framework的Windows窗体应用、控制台应用,默认安装后或添加LINQtoSQL、LINQtoXML类后都能自动生成完整的支持文件,而.NET 7.0控制台应用和窗体应用,默认安装或添加应用后不能自动生成完整的支持文件。

            比照缺少的支持文件,手动添加,就有可能获得.NET 7.0控制台应用、窗体应用支持使用LINQtoSQL、LINQtoXML的解决方案。

            本文作者在上一片文章中发布了.NET 7.0窗体应用支持使用LINQtoSQL、LINQtoXML的解决方案。在本文中,作者将公布.NET 7.0控制台应用支持使用LINQtoSQL、LINQtoXML的解决方案。

    一、新建控制台应用和数据库连接

             VS2022→新建C#控制台应用.NET 7.0→新建数据库连接db_CSharp→添加LINQtoSQL,如建立过该类,接受确认,双击DataClasses1.dbml,拖拽入数据表tb_Employee、tb_Salary,保存,资源管理器里会自动生成一些文件,但不全,打开DataClasses1.designer.cs,会发现一片红警(类似的截图在作者上一篇文章中有,读者也可以亲自测试)→,发现缺少很多支持文件:System.Data.Linq、System.Data.Linq.Mapping(现象:这些using是虚的)。

    二、手动添加System.Data.Linq程序包

            这个文件让程序支持LINQ,仅仅有它不一定对全部的LINQ有用,但没有它一定不支持LINQ。

            通过NuGet下载安装netcore-system.data.linq.7.0.4。具体的操作已经发布在作者的上一篇文章中。

            安装这个程序包后,使得我的程序获得支持LINQtoXML类。

    三、手动添加System.Data.SqlClient程序包

            通过NuGet下载安装 system.data.sqlclient.4.8.5。

            安装这个程序包后,使得我的程序获得支持LINQtoSQL类。

    四、再次操作DataClasses1.dbml

            双击DataClasses1.dbml →删除窗体中曾经添加的数据表tb_Employee、tb_Salary,保存 →重新添加数据表tb_Employee、tb_Salary,保存。→ 再次打开DataClasses1.designer.cs,发现曾经的一片红警,消失了。

            至此,在.NET 7.0控制台应用里支持使用LINQtoSQL、LINQtoXML的开发环境搭建完成。

     

    五、示例

             在上述的开发环境中,设计一段程序生成一个新的XML文件,这个XML的数据源自数据库db_CSharp的两个数据表:从数据表tb_Employee取前三个记录,每个记录选取ID和Name两个元素,从数据表tb_Salary前一个记录的元素Salary。

    1.源码

    1. // .NET7.0控制台应用支持LINQtoSQL和LINQtoXML
    2. using System.Data;
    3. using System.Xml.Linq;
    4. namespace _10_2
    5. {
    6. class Program
    7. {
    8. static void CreateXmlFromDatabase()
    9. {
    10. string path = Directory.GetCurrentDirectory() + @"\Createbydb.xml";
    11. string strCon = "Data Source=DESKTOP-3LV13FS;Integrated Security=True;Database=db_CSharp;";
    12. DataClasses1DataContext? _Linq; //声明Linq连接对象并声明成为非null值
    13. _Linq = new DataClasses1DataContext(strCon);
    14. XElement root = new("db_CSharp", _Linq.tb_Employee.Select(c => new XElement("tb_Employee",
    15. new XElement("ID", c.ID),
    16. new XElement("Name", c.Name),
    17. new XElement("db_CSharp", _Linq.tb_Salary.Select(p => new XElement("tb_Salary",
    18. new XElement("Salary", p.Salary))).Take(1)))).Take(3)
    19. );
    20. root.Save(path);
    21. }
    22. static void Main(string[] args)
    23. {
    24. CreateXmlFromDatabase();
    25. }
    26. }
    27. }

    2.xml文件

    1. <db_CSharp>
    2. <tb_Employee>
    3. <ID>YGBH0001ID>
    4. <Name>小王Name>
    5. <db_CSharp>
    6. <tb_Salary>
    7. <Salary>1500Salary>
    8. tb_Salary>
    9. <tb_Salary>
    10. <Salary>3000Salary>
    11. tb_Salary>
    12. <tb_Salary>
    13. <Salary>5000Salary>
    14. tb_Salary>
    15. db_CSharp>
    16. tb_Employee>
    17. <tb_Employee>
    18. <ID>YGBH0002ID>
    19. <Name>小李Name>
    20. <db_CSharp>
    21. <tb_Salary>
    22. <Salary>1500Salary>
    23. tb_Salary>
    24. <tb_Salary>
    25. <Salary>3000Salary>
    26. tb_Salary>
    27. <tb_Salary>
    28. <Salary>5000Salary>
    29. tb_Salary>
    30. db_CSharp>
    31. tb_Employee>
    32. <tb_Employee>
    33. <ID>YGBH0003ID>
    34. <Name>小刘留Name>
    35. <db_CSharp>
    36. <tb_Salary>
    37. <Salary>1500Salary>
    38. tb_Salary>
    39. <tb_Salary>
    40. <Salary>3000Salary>
    41. tb_Salary>
    42. <tb_Salary>
    43. <Salary>5000Salary>
    44. tb_Salary>
    45. db_CSharp>
    46. tb_Employee>
    47. db_CSharp>

            读者看出什么问题来了吗?如何解决,欢迎提供方案。

  • 相关阅读:
    Llama2-Chinese项目:6-模型评测
    Android逆向第一步之开启root权限
    JS深入学习笔记 - 第三章.变量作用域与内存
    初级图论
    深入UDP收发数据(上)
    RabbitMQ相关概念
    Python:Jenkins包
    Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架
    screen_set.c
    公网环境下使用VNC远程连接Ubuntu系统桌面
  • 原文地址:https://blog.csdn.net/wenchm/article/details/134284891