我参考这个例子:返回选定的指定列
Quote:如果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();
Run Code Online (Sandbox Code Playgroud)
我看到他们正在通过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; }
}
Run Code Online (Sandbox Code Playgroud)
每次我只想通过LINQ从表中选择几列时,是否需要创建自己的类?
Ser*_*kiy 13
您不需要创建新类来从表中选择几列.您可以使用匿名类型.
var qry = from b in dc.Blobs
orderby b.RowVersion descending
select new { b.Id, b.Size, b.Signature, b.RowVersion};
return qry.ToList();
Run Code Online (Sandbox Code Playgroud)
仅传输选定的列.使用纯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
Run Code Online (Sandbox Code Playgroud)