C# 操作员'||';无法应用于类型为';字符串';和';字符串';(我如何解决这个问题)

C# 操作员'||';无法应用于类型为';字符串';和';字符串';(我如何解决这个问题),c#,sql,linq,join,datagridview,C#,Sql,Linq,Join,Datagridview,这是Windows窗体 我是新手,我没有太多的技能,但我理解 我有5张桌子 layer=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

这是Windows窗体 我是新手,我没有太多的技能,但我理解

我有5张桌子


layer=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个表中读取所有数据 我的代码也可以工作,我可以在datagridview中看到所有4个表中的所有数据

这是我的密码

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();

       }

     }
'''

这是我的最后一张桌子

位置=位置ID int、位置图表字符串、位置名称字符串

位置图数据=(GruNumber数据、DasNumber数据、GroNumber数据)

类似这样的数据 GruNumber、DasNumber、GropNumber

Gru01、Das01、Grop01

Gru02、Das02、Grop02

FreeGru01、FreeDas01、FreeGrop01


位置图表:位置名称

FreeGru01:大师级

FreeDas01:成员

FreeGrop01:老板


如果(GruNumber或DasNumber或GropNumber=positioncharts),我使用此代码连接此数据 然后我在datagridview中也看到了PositionName

我将代码更改为此代码

'''

''' 但是在我使用这个代码之后,我收到了这个错误

运算符“| |”不能应用于“string”和“string”类型的操作数

我把代码改成这个

'''

'''

不行

还有这个

'''

'''

不行


如何解决此问题?

若要实现非
且只有相等条件的
联接的多条件联接,必须使用交叉联接。在LINQ中,这是通过添加另一个
from
子句并将连接条件放入
中来实现的,其中

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
             };

那么,你认为
string | | string
会是什么?你想用这个
实现什么。。。在gru.GruNumber | | das.DastehNumber | | grop.GroupNumber等于position.PositionCharts
?@500 InternalServerError我将尝试读取联接数据如果(GruNumber或datehnumber或gropnumber=PositionCharts)如果这3或1或3=PositionCharts数据,那么我可以在datagridview中看到PositionName(可能是我的关系表错误,或者我最常更改表关系,或者装箱新表等等)如果你like@TaWyea(所有数据(GruNumber或DasNumber或GropNumber=PositionCharts)=字符串)在C中,您可以使用List.Contains。在SQL中,您可以使用is In(..)。
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)
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
             };