Linq多表添加插入、更新操作、子查询

一、添加:

1、联合主键:主键全部相同,插入失败,至少要有一个不同。(主键唯一约束条件)

2、添加对象要另外命名创建

3、添加空数据时,得是空字符串 :“ ”

二、更新:

1、先根据添加查询出数据,重新赋值要修改的字段,再更新(update)对象

 

三、(1)查询所有:

select * from User order by UserId

to Linq:

List<User> listUser= ctx.User.OrderBy(t=>t.UserId);

 

(2)查询某一列最大值:

SELECT NVL(MAX(VERSION), 0)    //如果version字段的查询结果是null ,则取0

to Linq:

ctx.Spcspechis.Where(t=>t.Factory==sFactory&&t.ChartId==sChartId).Select(t=>new {t.Version }).Max(t=>t.Version); //查询version字段的最大值

(3)多条件嵌套子查询:

 string  strQuery = "SELECT * FROM SPCSPECHIS WHERE FACTORY=? AND CHART_ID=? AND VERSION = (SELECT MAX(VERSION) FROM SPCSPECHIS  WHERE FACTORY=? AND CHART_ID=?  AND RELEASE_FLAG='Y' AND APPLY_START_TIME<=? AND(APPLY_END_TIME = ' ' OR APPLY_END_TIME >= ?) AND RELEASE_TIME <= ?)";

to Linq:

 spcspechis = ctx.Spcspechis.Where(t => t.Factory == sFactory && t.ChartId == sChartId && t.Version .CompareTo(ctx.Spcspechis.Where(a => a.Factory == sFactory && a.ChartId == sChartId && a.ReleaseFlag == "Y"
                   && a.ApplyStartTime.CompareTo(sApplyStartTime) <= 0 && ((a.ApplyEndTime == " ") || (a.ApplyEndTime.CompareTo(sApplyEndTime) >= 0
                   && a.ReleaseTime.CompareTo(sReleaseTime) <= 0))).Select(a => new { a.Version }).DefaultIfEmpty().Max()) == 0).FirstOrDefault();

=====

分两步,先查子查询(用DefaultIfEmpty,不然用FirstOrDefault会报异常Sequence contains no elements ):

decimal dversion =ctx.Spcspechis.Where(a => a.Factory == sFactory && a.ChartId == sChartId && a.ReleaseFlag == "Y"
                   && a.ApplyStartTime.CompareTo(sApplyStartTime) <= 0 && ((a.ApplyEndTime == " ") || (a.ApplyEndTime.CompareTo(sApplyEndTime) >= 0
                   && a.ReleaseTime.CompareTo(sReleaseTime) <= 0))).Select(a => new { a.Version }).DefaultIfEmpty().Max(t=>t.Version)) == 0
 spcspechis = ctx.Spcspechis.Where(t => t.Factory == sFactory && t.ChartId == sChartId && t.Version.CompareTo(dversion).FirstOrDefault();

注:子查询中要换个变量(用a)避免重复定义

(4)联表查询,结果只需多个列:

strQuery = "SELECT USER_ID, USER_DESC, SEC_GRP_ID, EMAIL_ID"
                                + " FROM SPCCHARTUSER"
                                + " WHERE FACTORY=?"
                                + " AND CHART_ID=?"
                                + " AND USER_ID>=?"
                                + " ORDER BY USER_ID ASC";

to Linq:

  var strQery1 = (new int[] { 1 }).Select(t=>new { UserId = "empty", UserDesc = "empty", SecGrpId = "empty", EmailId = "empty" }).ToList();


 strQery1 = ctx.Spcchartuser.Where(t => t.Factory == sFactory && t.ChartId == sChartId && t.UserId.CompareTo(sUserId) >= 0).OrderBy(t => t.UserId)
                        .Select(t=>new { t.UserId, t.UserDesc, t.SecGrpId, t.EmailId })
                        .ToList();

查询条件数组类型创建方式:

public SPCCoreType.SPC_Update_Chart_In_Tag_x_alarm_code_tbl[] x_alarm_code_tbl;

 

public struct SPC_Update_Chart_In_Tag_x_alarm_code_tbl
        {
            public string alarm_code;
        }
x_alarm_code_tbl =new SPCCoreType.SPC_Update_Chart_In_Tag_x_alarm_code_tbl[]
                {

                    new SPCCoreType.SPC_Update_Chart_In_Tag_x_alarm_code_tbl{ alarm_code ="1"},
                    new SPCCoreType.SPC_Update_Chart_In_Tag_x_alarm_code_tbl{ alarm_code ="1"},
                    new SPCCoreType.SPC_Update_Chart_In_Tag_x_alarm_code_tbl{ alarm_code ="1"},
                }

查询条件引用数组时:

POPCoreType.POP_Update_Image_In_Tag_item_list[] item_list = new POPCoreType.POP_Update_Image_In_Tag_item_list[]
             {
                 new POPCoreType.POP_Update_Image_In_Tag_item_list()
                 {
                     seq_num=1,
                     image_data="1"
                 },
                 new POPCoreType.POP_Update_Image_In_Tag_item_list()
                 {
                     seq_num=2,
                     image_data="1"
                 },
             };


             POPCoreType.POP_Update_Image_In_Tag Update_Image_In = new POPCoreType.POP_Update_Image_In_Tag()
             {
                 _cmn_in = cmn_in,
                 image_id = "1",
                 image_desc = "1",
                 item_list = item_list,
                 count = 2
             };

 

转载于:https://my.oschina.net/8824/blog/3067396

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
异步 LINQ 多表查询是一种以异步方式执行的查询操作,涉及多个数据。通常情况下,异步 LINQ 多表查询被用于处理执行时间较长的操作,以提高性能和响应性。在异步 LINQ 多表查询中,可以使用 LINQ 查询达式或方法语法来编写查询。 具体来说,异步 LINQ 多表查询通常涉及多个数据,通过将它们连接起来,筛选出需要的数据。这可以通过使用 `join` 关键字将两个或多个连接在一起,使用 `where` 条件筛选数据,以及使用 `select` 投影查询结果。 举个例子,假设我们有两个:`Customers` 和 `Orders`。我们想要查询所有姓氏为 "Smith" 的客户及其对应的订单。我们可以使用以下代码来实现异步 LINQ 多表查询: ```csharp var query = from customer in dbContext.Customers join order in dbContext.Orders on customer.Id equals order.CustomerId where customer.LastName == "Smith" select new { customer, order }; var result = await query.ToListAsync(); ``` 在上述代码中,我们使用了 LINQ 查询达式来连接 `Customers` 和 `Orders` ,并筛选出姓氏为 "Smith" 的客户及其对应的订单。最后,通过调用 `ToListAsync` 方法将查询结果异步返回。 总结起来,异步 LINQ 多表查询是一种以异步方式执行的查询操作,可以通过连接多个数据,筛选数据,并投影查询结果来满足特定需求。通过使用异步 LINQ 多表查询,我们可以提高性能和响应性,特别是在处理执行时间较长的操作时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一文说通异步 LINQ](https://blog.csdn.net/biyusr/article/details/125575777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linq多表查询](https://blog.csdn.net/weixin_44543189/article/details/89303092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值