оператор '||' не може да се прилага към операнди от тип 'string' и 'string' (как мога да поправя това)

Това е форма на Windows, аз съм нов и нямам много умения, но разбирам

имам 5 маса


слой = layerID int, layerName низ ( 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();

       }

     }

'''

това е последната ми маса

Позиция = PositionID int, низ PositionCharts, низ PositionName

Данни на PositionCharts = (данни GruNumber, данни DasNumber, данни GroNumber)

Данни Нещо подобно

GruNumber, DasNumber, GropNumber

Gru01, Das01, Grop01

Gru02, Das02, Grop02

FreeGru01, FreeDas01, FreeGrop01


Графики на позиции: Име на позиция

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
В C# можете да използвате List.Contains. В SQL можете да използвате a е IN (..).   -  person TaW    schedule 23.04.2020
comment
Може би моята рецепта от SQL към LINQ може да ви помогне. Съвет: LINQ поддържа само equijoin, в противен случай трябва да използвате from...where.   -  person NetMage    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