0

正如标题所述,我正在尝试在 Linq-To-SQL 中执行选择子查询。这是我的情况:

我有一个返回以下字段的数据库视图:

  • 来源 ID
  • 许可证编号
  • 许可证名称
  • 特征 ID
  • 特征名称

现在我希望能够将其存储在我的模型中,该模型具有以下属性

  • ID
  • 姓名
  • 特征(这是具有 Id、名称和图标的列表 => 图标是字节 [])

这是我写的不起作用的查询:

var licensesWithCharacteristics =
                _vwAllLicensesWithAttributesAndSourceIdRepository.GetAll()
                .Where(x => x.SourceID == sourceId)
                .Select(a => new LicenseWithCharacteristicsModel()
                {
                    LicenseId = a.LicenseId,
                    LicenseName = a.LicenseName
                        ,CharacteristicList = _vwAllLicensesWithAttributesAndSourceIdRepository.GetAll()
                     .Where(x => x.LicenseId == a.LicenseId)
                     .Select(c => new CharacteristicModel { Id = c.CharacteristicID, Name = c.CharacteristicName, Icon = c.Icon })
                     .Distinct().ToList()
                })
                .Distinct().ToList();

你会如何解决这个问题?我试图在一个查询中执行此操作以保持我的性能,但我有点卡住了。

4

1 回答 1

1

您的示例查询和模型不是那么连贯(Icon来自哪里,特性或特性列表),但无论如何。

我分两部分执行此操作,您当然可以在一个查询中重新组合。我在分组后枚举了结果,您可以尝试不枚举(全部在linq to sql中,但不确定它是否会起作用)。

var groupedResult = 
     _vwAllLicensesWithAttributesAndSourceIdRepository.GetAll()
         .Where(x => x.SourceID == sourceId)
         .GroupBy(m => new {m.LicenseId, m.LicenseName})
         .ToList();

var results = groupedResult.Select(group => new LicenseWithCharacteristicsModel {
                  LicenseId = group.Key.LicenseId,
                  LicenseName = group.Key.LicenseName,
                  Characteristics = group.Select(m=> new CharacteristicModel {
                       Id = m.CharacteristicId,
                       Name = m.CharacteristicName
                      }).ToList()
                  });

在“单个查询”中

_vwAllLicensesWithAttributesAndSourceIdRepository.GetAll()
    .Where(x => x.SourceID == sourceId)
    .GroupBy(m => new {m.LicenseId, m.LicenseName})
    .Select(group =>
        new LicenseWithCharacteristicsModel
        {
            LicenseId = group.Key.LicenseId,
            LicenseName = group.Key.LicenseName,
            Characteristics = group.Select(m =>
                new CharacteristicModel
                {
                    Id = m.CharacteristicId,
                    Name = m.CharacteristicName
                }).ToList()
        });
于 2012-10-04T10:07:57.953 回答