LINQ - 不选择某些字段?

vid*_*oon 9 linq linq-to-entities

我有一个与实体框架映射的LINQ查询,看起来像这样:

image = this.Context.ImageSet
                    .Where(n => n.ImageId == imageId)
                    .Where(n => n.Albums.IsPublic == true)
                    .Single();
Run Code Online (Sandbox Code Playgroud)

这将返回单个图像对象并按预期工作.

但是,此查询将返回数据库中我的Image表的所有属性.在正常情况下,这样会很好,但这些图像包含很多二进制数据需要很长时间才能返回.

基本上,在它的当前状态我的linq查询正在做:

Select ImageId, Name, Data
From Images
...
Run Code Online (Sandbox Code Playgroud)

但我需要一个执行此instread的查询:

Select ImageId, Name
From Images
...
Run Code Online (Sandbox Code Playgroud)

注意我想加载除数据之外的所有内容.(我可以在第二次异步传递中获取此数据)

and*_*ndy 8

不幸的是,如果使用LINQ to SQL,则没有最佳解决方案.

你有3个选择:

  1. 您将使用上下文跟踪返回实体,并返回所有字段(在本例中为Image)
  2. 您选择字段并返回匿名类型
  3. 您选择字段并返回强类型自定义类,但如果这就是您想要的,则会丢失跟踪.

我喜欢LINQ to SQL,但就是这样.

我唯一的解决方案是重构DataBase,将所有大型数据移动到一个单独的表中,并从Image表链接到它.

这样,当返回Image时,您只返回新DataID字段中的一个键,然后您可以在需要时访问那些较重的数据.

干杯