LINQ的加入具有鲜明

问题描述:

我有两个表 TABLE_ALINQ的加入具有鲜明

id col_A col_B Col_C DataAmt value 
1 a  b  c  1  1 
2 a  b  c  1  1 
3 a  b  c  2  2 
4 a  b  c  2  2 
5 a  b  c  2  2 

表-B

id col_A col_B col_C 
1 a  b  c 
2 a  b  c 
3 a  b  c 

我的LINQ查询

from table_B in db.Table_B 
join table_A in db.table_A 
on new 
{ 
    col_A = table_B.col_A, 
    col_B = table_B.col_B, 
    col_C = table_B.col_C, 
} 
equals new 
{ 
    col_A = table_A.col_A, 
    col_B = table_A.col_B, 
    col_C = table_A.col_C, 
} 
select table_A 

在我两个领域,一个是Value_A我和Value_B
从表B到表A查询三个结果。我必须采取不同的上为col_acol_Bcol_CDataAmt,从 COL在TABLE_A其大于1应该被放置在字段Value_A值和其他价值_B
我不能采取不同的价值观和价值观的分离。

+0

你可以重写你的答案?理解它有点复杂。 –

也许这样的事情,改变SELECT子句如你所愿:

(from table_B in db.Table_B 
join table_A in db.table_A 
on new 
{ 
    col_A = table_B.col_A, 
    col_B = table_B.col_B, 
    col_C = table_B.col_C, 
} 
equals new 
{ 
    col_A = table_A.col_A, 
    col_B = table_A.col_B, 
    col_C = table_A.col_C, 
} 
select new 
{ 
    col_A = table_A.value > 1 ? table_A.value : table_A.col_A, 
    col_B = table_A.value > 1 ? table_A.Col_B : table_A.value: , 
    col_C = table_A.col_C, 
    DataAmt = table_A.DataAmt 
}).Distinct(); 

static void Main(string[] args) 
    { 
     List<TableA> tableA = new List<TableA> 
     { 
      new TableA { Id = 1, A = "a", B = "b", C = "c", DataAmt = 1, Value = 1 }, 
      new TableA { Id = 2, A = "a", B = "b", C = "c", DataAmt = 1, Value = 1 }, 
      new TableA { Id = 3, A = "a", B = "b", C = "c", DataAmt = 2, Value = 2 }, 
      new TableA { Id = 4, A = "a", B = "b", C = "c", DataAmt = 2, Value = 2 }, 
      new TableA { Id = 5, A = "a", B = "b", C = "c", DataAmt = 2, Value = 2 }, 
     }; 

     List<TableB> tableB = new List<TableB> 
     { 
      new TableB { Id = 1, A = "a", B = "b", C = "c" }, 
      new TableB { Id = 2, A = "a", B = "b", C = "c" }, 
      new TableB { Id = 3, A = "a", B = "b", C = "c" }, 
     }; 

     var result = tableA.Where(x => x.Value > 1 && tableB.Any(y => y.A == x.A && y.B == x.B && y.C == x.C)).Select(x => new 
     { 
      A = x.A, 
      B = x.B, 
      C = x.B, 
      DataAmt = x.DataAmt 
     }).Distinct().ToList(); 
    }