gpt4 book ai didi

sql - 使用linq : What gets transferred?选择特定的列

转载 作者:行者123 更新时间:2023-12-04 03:08:37 25 4
gpt4 key购买 nike

我引用以下示例:Return selected specified columns

引用:
如果BlobDetails不是LINQ实体,则可以直接执行以下操作:

var qry = from b in dc.Blobs
orderby b.RowVersion descending
select new BlobDetails {
Id = b.Id, Size = b.Size,
Signature = b.Signature, RowVersion = b.RowVersion};

return qry.ToList();

我看到他们正在通过ORM工具LINQ TO SQL选择查询中的特定列。
批评ORM工具的人说,如果我没记错的话,ORM工具会从表中选择并返回整个对象,并限制了只能选择特定列的选项,就像通过经典的SQL编程可以做到的那样。当然,当我看到此示例时,我对此表示怀疑,但尽管如此,我仍然不断问自己一个问题:数据库是仅返回选定的列,还是返回整个对象,而将列过滤留给ORM工具?

在此示例中,它们还有一个名为Blobdetails的类:
public class BlobDetails   
{
public int Id { get; set; }
public string Signature { get; set; }
public int Size { get; set; }
public System.Data.Linq.Binary RowVersion { get; set; }
}

每当我只希望通过LINQ从表中选择几列时,是否需要创建自己的类?

最佳答案

您无需创建新的类即可从表中选择几列。您可以为此使用匿名类型。

var qry = from b in dc.Blobs
orderby b.RowVersion descending
select new { b.Id, b.Size, b.Signature, b.RowVersion};

return qry.ToList();

仅传输选定的列。使用普通SQL和使用LINQ to SQL没有区别。当您执行LINQ查询时,它将转换为纯SQL并执行。然后将结果映射到您的对象。

您可以使用SQL Server Profiler查看在服务器上生成并执行了哪些查询。您也可以使用 LINQPad来查看查询将生成什么SQL。在您的情况下,使用BlobDetails或匿名对象的查询将相同:
SELECT [t0].[Id], [t0].[Size], [t0].[Signature], [t0].[RowVersion]
FROM [Blobs] AS [t0]
ORDER BY [t0].[RowVersion] DESC

关于sql - 使用linq : What gets transferred?选择特定的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14338008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com