将 SQL 重写为 LINQ [重复]

Posted

技术标签:

【中文标题】将 SQL 重写为 LINQ [重复]【英文标题】:Rewriting SQL to LINQ [duplicate] 【发布时间】:2016-07-23 11:59:16 【问题描述】:

我对 LINQ 完全陌生,我想将我的一些 SQL 查询重写为 LINQ(只是为了学习),但我已经卡在了开头。

这里是 SQL 查询:

declare @typMon varchar(200)
set @typMon = 'moneta'

select * 
from [db1].[dbo].[Picking] 
where number = 1000
and Group IN (Select grupa 
              from [db2].[dbo].[groups] 
              where typ = @typMon)

子查询返回 3 个输出行:http://i.stack.imgur.com/CDOwr.png

这是我在 LINQ 中写的内容

这部分工作正常:

var query = from x in db.grupyTowarowes
            where x.typ == typMoneta
            select new
            
                x.grupa
            ;

问题就在这里:

var test = from z in dbContext.PICKINGs
           where z.Number == 1000 
           && z.group IN output from 1st query
           select new
           
               z.id
           ;

【问题讨论】:

【参考方案1】:
var test = from z in dbContext.TBL_CSV_PICKINGs 
           join g in db.grupyTowarowes on Z.group equals g.grupa
           where z.Number == 1000 && 
           g.typ == typMoneta
           select new  z.id ;

或者在方法语法中

dbContext.TBL_CSV_PICKINGs
    .Where(z => z.Number == 1000)
    .Join(db.grupyTowarowes.Where(g => g.typ == typMoneta)
        z => z.group,
        g => g.grupa,
        (z,g) => z.id);

【讨论】:

在第一次查询中,我在 x.typ == typMoneta 上遇到错误,提示我:当前上下文中不存在名称“x” 查询没问题,但在 dataGridView1.DataSource = test 时出现错误;我知道我不能这样做,但我不知道其他人^

以上是关于将 SQL 重写为 LINQ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

LINQ中的SQL Like子句[重复]

如何将关联连接从 SQL 重写为 LINQ

将 Linq 中的 NHibernate 应用程序重写为 SQL

LINQ 和 SQL 中看似等效的查询返回不同的结果 [重复]

利用linq to sql 建立查询方法返回值类型为List<T> 怎样去除集合中的重复数据?

T-SQL:手动锁定表几分钟[重复]