оператор '||' не может быть применен к операндам типа 'строка' и 'строка' (как я могу это исправить) - PullRequest
0 голосов
/ 23 апреля 2020

Это Windows форма, я новичок, и у меня нет тонны навыков, но я понимаю,

у меня есть 5 таблиц


layer = layerID int, layerName string (layerID = = PK)

Gor = LayerID int, GroID int, строка GroNnumber (GroID = PK и LayerID = FK)

Gru = GruID int, GroID int, строка GruNumber (GruID = PK и GorID = FK)

Das = GruID int, DasID int, строка DasNumber (DasID = PK и GruID = FK)

Grop = GropID int, DasID int, строка GropNumber (GropID = PD и DasID = FK)

все эти 5 табличных отношений (PK - FK)

Я использую Join для чтения всех данных из этой 5 таблицы, и мой код также работает, и я могу видеть все свои данные из всех 4 таблицы внутри моего datagridview

это мой код

using (UnitOfWork db = new UnitOfWork())
{
DGVCharts.AutoGenerateColumns = false;

    var result = from layer in db.LayerRepository.Get()
        join gor in db.GorRepository.Get() on layer.LayerID equals gor.LayerID
        join gru in db.GruRepository.Get() on gor.GorID equals gru.GorID
        join das in db.DasRepository.Get() on gru.GruID equals das.GruID
        join grop in db.GropRepository.Get() on das.DastehID equals grop.DastehID


    select new
    {
        layer.LayerID,
        layer.LayerName,
        gor.GorID,
        gor.GorNumber,
        gru.GruID,
        gru.GruNumber,
        das.DasID,
        das.DasNumber,
        grop.GropID,
        grop.GropNumber,


        };
        DGVCharts.DataSource = result.ToList();

       }

     }

'' '

это моя последняя таблица

Position = PositionID int, PositionCharts string, PositionName string

Данные PositionCharts = (Данные GruNumber, Данные DasNumber, Данные GroNumber)

Данные Примерно так

GruNumber, DasNumber, GropNumber

Gru01, Das01, Grop01

Gru02, Das02, Grop02

FreeGru01, FreeDas01, FreeGrop01


PositionCharts: PositionName

FreeGru01: Мастер

FreeDas01: Пользователь

FreeGrop01: Босс


i используйте этот код для присоединения к этим данным, если (GruNumber или DasNumber или GropNumber = positioncharts), тогда я также вижу PositionName в моем представлении данных

Я изменяю свой код на этот код

'' '

using (UnitOfWork db = new UnitOfWork())
{
DGVCharts.AutoGenerateColumns = false;

    var result = from layer in db.LayerRepository.Get()
        join gor in db.GorRepository.Get() on layer.LayerID equals gor.LayerID
        join gru in db.GruRepository.Get() on gor.GorID equals gru.GorID
        join das in db.DasRepository.Get() on gru.GruID equals das.GruID
        join grop in db.GropRepository.Get() on das.DastehID equals grop.DastehID
        join position in db.PositionRepository.Get() on gru.GruNumber || das.DastehNumber || grop.GroupNumber equals position.PositionCharts

    select new
    {
        layer.LayerID,
        layer.LayerName,
        gor.GorID,
        gor.GorNumber,
        gru.GruID,
        gru.GruNumber,
        das.DasID,
        das.DasNumber,
        grop.GropID,
        grop.GropNumber,
        position.PositionID,
        position.PositionName
};
DGVCharts.DataSource = result.ToList();

}

}

'' 'но после использования этого кода я получаю эту ошибку

operator' || ' не может применяться к операндам типа 'string' и 'string'

я меняю код на этот

'' '

join position in db.PositionRepository.Get() on 

gru.GruNumber equals position.PositionCharts || 
das.DastehNumber equals position.PositionCharts || 
grop.GroupNumber equals position.PositionCharts

' ''

не работает

и это

'' '

   join position in db.PositionRepository.Get() on 

    (gru.GruNumber equals position.PositionCharts || 
    das.DastehNumber equals position.PositionCharts || 
    grop.GroupNumber equals position.PositionCharts)

' ''

не работает!

как я можно решить эту проблему?

1 Ответ

1 голос
/ 23 апреля 2020

Чтобы реализовать объединение с несколькими условиями, которое не является объединением AND только с условиями равенства, необходимо использовать перекрестное объединение. В LINQ это реализуется путем добавления еще одного предложения from и помещения условий соединения в where:

var result = from layer in db.LayerRepository.Get()
             join gor in db.GorRepository.Get() on layer.LayerID equals gor.LayerID
             join gru in db.GruRepository.Get() on gor.GorID equals gru.GorID
             join das in db.DasRepository.Get() on gru.GruID equals das.GruID
             join grop in db.GropRepository.Get() on das.DastehID equals grop.DastehID
             from position in db.PositionRepository.Get()
             where gru.GruNumber == position.PositionCharts || das.DastehNumber == position.PositionCharts || grop.GroupNumber == position.PositionCharts
             select new {
                 layer.LayerID,
                 layer.LayerName,
                 gor.GorID,
                 gor.GorNumber,
                 gru.GruID,
                 gru.GruNumber,
                 das.DasID,
                 das.DasNumber,
                 grop.GropID,
                 grop.GropNumber,
                 position.PositionID,
                 position.PositionName
             };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...