C# 在选择匿名类型时被LINQ 2 SQL行为所迷惑
我真的被我看到的LINQ的行为弄糊涂了,这给我带来了麻烦 我写了一个如下的查询:C# 在选择匿名类型时被LINQ 2 SQL行为所迷惑,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我真的被我看到的LINQ的行为弄糊涂了,这给我带来了麻烦 我写了一个如下的查询: var reportalerts = pushDB.ReportAlerts .Select(p => new {p.Title, p.Url, p.DateStamp}) .OrderBy(p => p.DateStamp) .Take(numResul
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]
也就是说,它现在从表中获取每一列。就像它已经决定的那样,这家伙正在为我选择足够多的专栏,让我现在就去抓住它们。这对我来说是一个问题,因为我想从另一个具有不同列的表中用一个类似的查询连接(即联合所有查询)。(在order by/take之前)如果它只接受由我的匿名类型属性指定的列,这不会是一个问题,但由于它接受所有列,并且两个表具有不同的列,因此失败
我可以用各种不同的方法解决这个问题,所以我没有被这个问题所阻止,我只是想了解上面发生了什么,如果没有办法让它返回你想要的列。Gar,那是因为我是个白痴 问题在于,文本不是表上的属性,它在那里是为了满足一个接口,并实际返回另一个属于表的属性 将上述内容更改为:
var reportalerts = pushDB.ReportAlerts
.Where(p => subscribedMpids.Contains(p.Mpid))
.Select(p => new {p.Title, p.Url, p.DateStamp, Text = p.Description})
.OrderBy(p => p.DateStamp)
.Take(numResultsPerPage);
工作如期。加,那是因为我是个白痴 问题在于,文本不是表上的属性,它在那里是为了满足一个接口,并实际返回另一个属于表的属性 将上述内容更改为:
var reportalerts = pushDB.ReportAlerts
.Where(p => subscribedMpids.Contains(p.Mpid))
.Select(p => new {p.Title, p.Url, p.DateStamp, Text = p.Description})
.OrderBy(p => p.DateStamp)
.Take(numResultsPerPage);
一切正常