Linq 2 Sql: невозможно передать параметр IQueryable <> - PullRequest
0 голосов
/ 10 января 2011

У меня есть следующая функция:

public class InfrStadium
{
    private InfrStadium(int iTeamId)
    {
        _teamId = iTeamId;
        _sectors = InfrStadiumSector.GetTeamSectors(iTeamId);
        ...
    }
    public void Init()
    {
        use(_sectors);
    }
    IList<InfrStadiumSector> _sectors;

какой-то метод вызывает ее:

public class InfrStadium
{
    private InfrStadium(int iTeamId, IList<InfrStadiumSector> sectors )
    {
        _teamId = iTeamId;
        _sectors = sectors;
        ...
    }

    public static IList<InfrStadium> GetBestStadium(IQueryable<InfrStadiumSector> sectors)
    {
        IQueryable<InfrStadium> stadiums = from sector in sectors
                                           group sector by sector.TeamId
                                           into team_sectors
                                           select new InfrStadium(team_sectors.Key)
                ;

        return stadiums.ToList();
    }
...
}

Здесь все хорошо.Но есть проблема, внутри конструктора 'InfrStadium' для каждой команды мне нужно получить информацию по секторам, которая уже была сгруппирована для конкретной команды.Поэтому я сделал такие изменения:

РЕДАКТИРОВАНИЕ: был добавлен подход с IList<>

    public static IList<InfrStadium> GetBestStadium(IQueryable<InfrStadiumSector> sectors)
    {
        IQueryable<InfrStadium> stadiums = from sector in sectors
                                           group sector by sector.TeamId into team_sectors
                                           select new InfrStadium(
                                               team_sectors.Key,
                                               team_sectors.ToList()
                                               )
                ;

        return stadiums.ToList();
    }

И получил следующую ошибку:

Ожидается вызов метода с запросом.Получил 'team_sectors.ToList ()'.Имя параметра: информация

Почему?Что здесь не так?

Другой подход (на самом деле, не уверен, что он вообще должен работать):

    private InfrStadium(int iTeamId, IQueryable<InfrStadiumSector> sectors)
    {
        _teamId = iTeamId;
        _qSectors= sectors;
        ...
    }
    public void Init()
    {
        use(_qSectors.ToList());
    }
    IQueryable<InfrStadiumSector> _qSectors;

    public static IList<InfrStadium> GetBestStadium(IQueryable<InfrStadiumSector> sectors)
    {
        IQueryable<InfrStadium> stadiums = from sector in sectors
                                           group sector by sector.TeamId into team_sectors
                                           select new InfrStadium(
                                               team_sectors.Key,
                                               team_sectors.AsQueryable()
                                               )
                ;

        return stadiums.ToList();
    }

Я собираюсь передать в конструктор объектов необходимые данные, которые не будут запрашивать БДснова.

Но в моем случае я получаю сообщение об ошибке:

Expression of type 'System.Int32'
cannot be used for parameter of type
'System.Collections.Generic.IEnumerable`1[InfrStadiumSector]' of method
'System.Linq.IQueryable`1[InfrStadiumSector] AsQueryable[InfrStadiumSector](System.Collections.Generic.IEnumerable`1[InfrStadiumSector])'

Я вообще не понимаю ошибку.Где в моем исходном коде 'Выражение типа "System.Int32"?

В моем случае я вызываю метод AsQueryable () для типа IGrouping<int,InfrStadiumSector> ...

Пожалуйста, сообщите, любые мысли приветствуются!

1 Ответ

0 голосов
/ 18 января 2011

Хотя фактическая причина ошибки до сих пор неясна, ответы на другие похожие вопросы ( Linq2Sql: оптимизация запросов , Linq2Sql: запрос - оптимизация подзапросов ) позволили обойти текущий вопрос.

Если кто-то знает лучшее решение - пожалуйста, сообщите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...