将SQL语句转换为LinQ to SQL查询

时间:2014-11-17 17:09:19

标签: c# sql-server linq

我是Linq的新手。我试图在SQL中将此语句写入Linq,但我无法做到正确。

SQL语句:

SELECT 
    changes.CHG_NO, changes.CHG_DESC, 
    transport_requests.TRKORR, transport_requests.AS4TEXT 
FROM 
    dbo.changes 
CROSS JOIN 
    dbo.transport_requests 
WHERE 
    transport_requests.TRKORR = N'E81K900251' AND changes.CHG_NO = 1

我试过了:

var que = from c in db.changes
          from t in db.transport_requests
          where ((t.TRKORR == "E81K900251") && (c.CHG_NO == 1))
          select new { c.CHG_NO, c.CHG_DESC,t.TRKORR, t.AS4TEXT };

但它不起作用。

没有抛出任何异常,它只是空了。

有人能指出正确的代码吗?

感谢。

这是我想要的输出:

CHG_NO     CHG_DESC      TRKORR         AS4TEXT
-----------------------------------------------
   1       test          E81K900251     Dummy

![更改表格] [1]

http://i.stack.imgur.com/4yoy1.png

![transport_requests] [1]

http://i.stack.imgur.com/eQjhh.png

2 个答案:

答案 0 :(得分:0)

您需要指定两个实体之间的公共密钥。

https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9

var q = 
from c in categories 
join p in products on c equals p.Category 
select new { Category = c, p.ProductName }; 

注意“在c等于p.Category”。

答案 1 :(得分:0)

好的,所以我设法找出问题所在。

var que = from c in db.changes
          from t in db.transport_requests
          where ((t.TRKORR == "E81K900251") && (c.CHG_NO == change[0].CHG_NO))
          select new { c.CHG_NO, c.CHG_DESC,t.TRKORR, t.AS4TEXT };

在我的原始代码中,我在"中使用了更改[0] .CHG_NO,其中"部分。当我使用数组时,EF试图将整个数组拉入其范围。我需要将change [0] .CHG_NO的值存储到变量中,它解决了我的问题。

这就是我需要做的事情:

var change_0_CHG_NO = change[0].CHG_NO;
var que = from c in db.changes
          from t in db.transport_requests
          where ((t.TRKORR == "E81K900251") && (c.CHG_NO == change_0_CHG_NO))
          select new { c.CHG_NO, c.CHG_DESC,t.TRKORR, t.AS4TEXT };