Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在选择匿名类型时被LINQ 2 SQL行为所迷惑_C#_.net_Linq To Sql - Fatal编程技术网

C# 在选择匿名类型时被LINQ 2 SQL行为所迷惑

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

我真的被我看到的LINQ的行为弄糊涂了,这给我带来了麻烦

我写了一个如下的查询:

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);
一切正常