C# 如何编写具有内部联接条件和子查询中的LINQ查询
我正在尝试为以下查询编写LINQC# 如何编写具有内部联接条件和子查询中的LINQ查询,c#,linq,C#,Linq,我正在尝试为以下查询编写LINQ Select DI.iDataItemID, DI.iDataTypeID, DIS.iDataItemCurrentStatusID from OT_BackendUpdate_DataItem DI INNER JOIN OT_BackendUpdate_DataItemStatus DIS ON DIS.iDataItemID = DI.iDataItemID INNER JOIN OT_BackendUpdate_RefDataItemStatus
Select DI.iDataItemID,
DI.iDataTypeID,
DIS.iDataItemCurrentStatusID
from OT_BackendUpdate_DataItem DI
INNER JOIN OT_BackendUpdate_DataItemStatus DIS ON DIS.iDataItemID =
DI.iDataItemID
INNER JOIN OT_BackendUpdate_RefDataItemStatus ON DIS.iDataItemCurrentStatusID
= OT_BackendUpdate_RefDataItemStatus.iDataItemStatusID
AND DIS.iDataItemCurrentStatusID = 1 AND DI.iDataTypeID = 8 and
DIS.dDateEffective IN (
SELECT Max(dDateEffective) FROM OT_BackendUpdate_DataItemStatus Where
OT_BackendUpdate_DataItemStatus.iDataItemID = DI.iDataItemID
)
result = from dataItem in msaDBContext.OT_BackendUpdate_DataItem
join dataItemStatus in msaDBContext.OT_BackendUpdate_DataItemStatus
on dataItem.iDataItemID equals dataItemStatus.iDataItemID
join refDataItemStatus in msaDBContext.OT_BackendUpdate_RefDataItemStatus
on dataItemStatus.iDataItemCurrentStatusID equals refDataItemStatus.iDataItemStatusID
where dataItemStatus.iDataItemCurrentStatusID == 1 && && dataItem.iDataTypeID == 8
&& (msaDBContext.OT_BackendUpdate_DataItemStatus.Where(x => x.iDataItemID == dataItem.iDataItemID).Select(x=>x.dDateEffective).Max<DateTime>()
).Equals(dataItemStatus.dDateEffective)
select new
{
iDataItemID = dataItem.iDataItemID,
iDataItemCurrentStatusID = dataItemStatus.iDataItemCurrentStatusID,
iDataTypeID = dataItem.iDataTypeID
};
我的LINQ查询如下:
result = from dataItem in msaDBContext.OT_BackendUpdate_DataItem
join dataItemStatus in msaDBContext.OT_BackendUpdate_DataItemStatus
on dataItem.iDataItemID equals dataItemStatus.iDataItemID
join refDataItemStatus in msaDBContext.OT_BackendUpdate_RefDataItemStatus
on dataItemStatus.iDataItemCurrentStatusID equals refDataItemStatus.iDataItemStatusID
where dataItemStatus.iDataItemCurrentStatusID == 1 && && dataItem.iDataTypeID == 8
select new
{
iDataItemID = dataItem.iDataItemID,
iDataItemCurrentStatusID = dataItemStatus.iDataItemCurrentStatusID,
iDataTypeID = dataItem.iDataTypeID
};
请告诉我如何添加逻辑来检查dDateEffective是否为LINQ查询中数据项的最大值。(即,从SQL查询中检查最大值(dDateEffective)的子查询)
需要知道如何在SQL查询中使用LINQ中的“IN”和“MAX”条件解决了以下查询中的问题
Select DI.iDataItemID,
DI.iDataTypeID,
DIS.iDataItemCurrentStatusID
from OT_BackendUpdate_DataItem DI
INNER JOIN OT_BackendUpdate_DataItemStatus DIS ON DIS.iDataItemID =
DI.iDataItemID
INNER JOIN OT_BackendUpdate_RefDataItemStatus ON DIS.iDataItemCurrentStatusID
= OT_BackendUpdate_RefDataItemStatus.iDataItemStatusID
AND DIS.iDataItemCurrentStatusID = 1 AND DI.iDataTypeID = 8 and
DIS.dDateEffective IN (
SELECT Max(dDateEffective) FROM OT_BackendUpdate_DataItemStatus Where
OT_BackendUpdate_DataItemStatus.iDataItemID = DI.iDataItemID
)
var res=(from DI in msaDBContext.OT_BackendUpdate_DataItem
.Where(x=>x.iDataTypeID==8)
join DIS in msaDBContext.OT_BackendUpdate_DataItemStatus
.Where(x=>x.iDataItemCurrentStatusID==1)
.GroupBy(x=>new
{
x.iDataItemID,
x.iDataItemCurrentStatusID,
x.dDateEffective
})
.Select(x=>new
{
iDataItemID=x.key.iDataItemID,
iDataItemCurrentStatusID=x.key.iDataItemCurrentStatusID,
dDateEffective=x.Max(y=>y.dDateEffective)
})
on DI.iDataItemID equals DIS.iDataItemID
join msaDBContext.OT_BackendUpdate_RefDataItemStatus RDIS
on DIS.iDataItemCurrentStatusID equals RDIS.iDataItemCurrentStatusID
select new {DI,DIS})
.Select(x=>new
{
iDataItemID=x.DI.iDataItemID,
iDataTypeID=x.DI.iDataTypeID,
iDataItemCurrentStatusID=x.DIS.iDataItemCurrentStatusID
}).ToList();
result = from dataItem in msaDBContext.OT_BackendUpdate_DataItem
join dataItemStatus in msaDBContext.OT_BackendUpdate_DataItemStatus
on dataItem.iDataItemID equals dataItemStatus.iDataItemID
join refDataItemStatus in msaDBContext.OT_BackendUpdate_RefDataItemStatus
on dataItemStatus.iDataItemCurrentStatusID equals refDataItemStatus.iDataItemStatusID
where dataItemStatus.iDataItemCurrentStatusID == 1 && && dataItem.iDataTypeID == 8
&& (msaDBContext.OT_BackendUpdate_DataItemStatus.Where(x => x.iDataItemID == dataItem.iDataItemID).Select(x=>x.dDateEffective).Max<DateTime>()
).Equals(dataItemStatus.dDateEffective)
select new
{
iDataItemID = dataItem.iDataItemID,
iDataItemCurrentStatusID = dataItemStatus.iDataItemCurrentStatusID,
iDataTypeID = dataItem.iDataTypeID
};
result=来自msaDBContext.OT_BackendUpdate_数据项中的数据项
在msaDBContext.OT_BackendUpdate_dataItemStatus中加入dataItemStatus
在dataItem.iDataItemID上等于dataItemStatus.iDataItemID
在msaDBContext.OT_BackendUpdate_refDataItemStatus中加入refDataItemStatus
在dataItemStatus.iDataItemCurrentStatusID上等于refDataItemStatus.iDataItemStatusID
其中dataItemStatus.iDataItemCurrentStatusID==1&&&&&dataItem.iDataTypeID==8
&&(msaDBContext.OT_BackendUpdate_DataItemStatus.Where(x=>x.iDataItemID==dataItem.iDataItemID)。选择(x=>x.dDateEffective).Max()
).Equals(dataItemStatus.dDateEffective)
选择新的
{
iDataItemID=dataItem.iDataItemID,
iDataItemCurrentStatusID=dataItemStatus.iDataItemCurrentStatusID,
iDataTypeID=dataItem.iDataTypeID
};
可能重复@BarrJ感谢您的回复。您能告诉我如何在中使用并为我的上述查询选择MAX吗。