我正试图让一群人去Linq工作:
from document in Documents
Group Join documentInstrument In DocumentInstruments
On document.DocumentId Equals documentInstrument.DocumentId
Into relatedDocumentInstruments = Group
From documentInstrument In relatedDocumentInstruments.DefaultIfEmpty()
Group Join instrument In Instruments
On documentInstrument.InstrumentId Equals instrument.InstrumentId
Into relatedInstruments = Group
From instrument In relatedInstruments.DefaultIfEmpty()
where (document.DocumentId = 1294201 Or document.DocumentId = 1294179)
Order by instrument.Name
Select New With
{
.Code = instrument.Code,
.InstrumentName = instrument.Name
}
这基本上留给我重复(相同的代码和名称)。我已经尝试了几乎每一个" Group By"语法我可以通过谷歌找到,似乎没有任何工作。
以下是我尝试转换为Linq(对于实体)的原始查询:
Sql = "SELECT Instruments.Name AS Instrument, Instruments.Code, COUNT(Instruments.Name) AS InstrumentCount, " & _
"SUM(Documents.Pages) AS TotalPages, SUM(Fees.FeeAmount) AS FeeAmount " & _
"FROM Documents LEFT JOIN DocInstruments ON Documents.DocID = DocInstruments.DocID AND DocInstruments.IsPrimary = <TRUE /> " & _
"LEFT JOIN Instruments ON DocInstruments.InstrumentID = Instruments.InstrumentID " & _
"LEFT JOIN (SELECT DocumentID, SUM(Amount) AS FeeAmount FROM Transactions WHERE PaymentType = 'Charge' and Void = <FALSE /> " & _
"GROUP BY DocumentID) AS Fees ON Documents.DocID = Fees.DocumentID " & _
"WHERE Documents.DocID IN (" & sList & ") " & sInstWhere & _
"GROUP BY Instruments.Name, Instruments.Code " & _
"ORDER BY Instrument"
**我暂时从我的linq查询中将联接留给了Transactions表,只是在添加更多**之前尝试让代码/名称正常工作
编辑:
好的,如果我能弄清楚如何将以下查询转换为linq,那将是一个良好的开端。我似乎无法通过......来加入小组。
SELECT i.Code, i.Name
from Instruments i
LEFT JOIN DocInstruments di on i.InstrumentId = di.InstrumentId
group by i.Code, i.Name
order by i.Code
似乎不应该那么难,而且一旦你知道语法就可能没有了,但是我无法让任何事情发挥作用而且Linqer无法连接到我的EF版本。长号。
那里有哪些linq专家可以提供帮助?
答案 0 :(得分:0)
在将大量直接SQL查询转换为LINQ后,我想我终于想出了分组。所以在我上面的问题中:
SELECT i.Code, i.Name
from Instruments i
LEFT JOIN DocInstruments di on i.InstrumentId = di.InstrumentId
group by i.Code, i.Name
order by i.Code
会是这样的(只是在这里输入,而不检查,但这应该是关闭的):
(FROM instrumentEntity in dbContext.InstrumentEntities
GROUP Join documentInstrumentEntity
ON instrumentEntity.InstrumentId equals documentInstrumentEntity.InstrumentId Into foundDocumentInstruments = Group
FROM foundDocumentInstrument in foundDocumentInstruments.DefaultIfEmpty()
SELECT NEW With
{
.Code = instrumentEntity.Code,
.Name = instrumentEntity.Name
}).GroupBy(Function(result) New With
{
Key result.Code,
Key result.Name
}).ToList()
使用VB.Net时,如果您使用超过1个属性进行分组,则使用&#34; Key&#34;非常重要。每个字段上的标识符,否则分组将不起作用。