1
我真的很困惑於LINQ的行爲,我看到它,並導致我一個問題。LINQ 2混淆選擇匿名類型時的SQL行爲
我寫了一個查詢,如:
var reportalerts = pushDB.ReportAlerts
.Select(p => new {p.Title, p.Url, p.DateStamp})
.OrderBy(p => p.DateStamp)
.Take(numResultsPerPage);
這將創建一個我期望的SQL:
SELECT TOP (5) [t0].[Title], [t0].[Url], [t0].[DateStamp]
FROM [dbo].[ReportAlerts] AS [t0]
ORDER BY [t0].[DateStamp]
如果我再添加一個額外的屬性,以我的匿名類型,生成的SQL是完全不同:
var reportalerts = pushDB.ReportAlerts
.Select(p => new {p.Title, p.Url, p.DateStamp, p.Text})
.OrderBy(p => p.DateStamp)
.Take(numResultsPerPage);
變爲:
SELECT TOP (5) [t0].[Title], [t0].[Url], [t0].[DateStamp], [t0].[PushReportAlertID], [t0].[DateOfAlert], [t0].[AlertProductID], [t0].[Description], [t0].[Mpid], [t0].[UIName], [t0].[CustomerDesc], [t0].[ProductArea]
FROM [dbo].[ReportAlerts] AS [t0]
ORDER BY [t0].[DateStamp]
這就是現在從表格中的每一列。這就像它已經決定,這傢伙正在爲我選擇足夠的專欄,現在就去抓住所有的專欄。這對我來說是一個問題,因爲我想用另一個具有不同列的表進行類似的查詢來連接(即UNION ALL)查詢。 (在by/take之前)如果只需要由我的匿名類型屬性指定的列,那麼這不會成爲問題,但由於它需要所有列和兩個表具有不同的列,因此它會失敗。
我可以用各種不同的方式解決問題,所以我不會因此而阻止,我只是想了解上面發生的事情,如果沒有辦法可以讓它返回列想。