оператор '||' нельзя применять к операндам типа «строка» и «строка» (как я могу это исправить)

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

у меня 5 стол


layer = layerID int, строка layerName (layerID = PK)

Gor = LayerID int , GroID int , GroNnumber string ( GroID = PK и LayerID = FK )

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

Das = GruID int, DasID int, DasNumber string (DasID = PK и GruID = FK)

Grop = GropID int , DasID int , GropNumber string (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, строка PositionName

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

Данные Что-то вроде этого

GruNumber, DasNumber, GropNumber

Гру01, Дас01, Груп01

Гру02, Дас02, Груп02

FreeGru01, FreeDas01, FreeGrop01


Диаграммы позиций: PositionName

FreeGru01: Мастер

FreeDas01: Участник

FreeGrop01: Босс


я использую этот код для объединения этих данных, если (GruNumber или DasNumber или GropNumber = positioncharts), тогда я также вижу PositionName в своем представлении 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
        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();

}

}

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

оператор '||' нельзя применять к операндам типа «строка» и «строка»

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

'''

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)

'''

не работа !

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


person Ali Zangeneh    schedule 23.04.2020    source источник
comment
Ну, а что вы ожидаете от string||string??   -  person TaW    schedule 23.04.2020
comment
Чего вы пытаетесь достичь с помощью этого ... on gru.GruNumber || das.DastehNumber || grop.GroupNumber equals position.PositionCharts?   -  person 500 - Internal Server Error    schedule 23.04.2020
comment
@ 500-InternalServerError я попытаюсь прочитать данные соединения, если (grunumber или datehnumber или gropnumber = positioncharts), если это 3, или 1, или 3 = данные positioncharts, тогда я могу увидеть PositionName в моем представлении datagridview (возможно, моя ошибка таблицы отношений или я больше всего меняю отношение таблицы или создайте новую таблицу или около того) я могу дать вам доступ для проверки моей программы с помощью ANYDESK, если вам нравится   -  person Ali Zangeneh    schedule 23.04.2020
comment
@TaW да (все данные (GruNumber или DasNumber или GropNumber = PositionCharts) = строка)   -  person Ali Zangeneh    schedule 23.04.2020
comment
В С# вы можете использовать List.Contains. В SQL вы можете использовать is IN (..).   -  person TaW    schedule 23.04.2020
comment
@NetMage, вы говорите, что я работаю над своим кодом без LINQ? и работать с обычным порядком SQL   -  person Ali Zangeneh    schedule 23.04.2020
comment
Нет, но если вы знаете, как выполнить то, что вы хотите, на SQL, вы можете перевести его на LINQ.   -  person NetMage    schedule 23.04.2020


Ответы (1)


Чтобы реализовать соединение с несколькими условиями, которое не является соединением 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
             };
person NetMage    schedule 23.04.2020