Member 14169626 Ответов: 3

Как выбрать лямбда-выражение two table в C#?


TABLE A:

ColumnA  ,  ColumnB  ,   ColumnC   ,   ColumnD


TABLE B:

ColumnA  ,  ColumnB  ,   ColumnC   ,   ColumnD




как выбрать два запроса по одним и тем же столбцам и найти партнеров с помощью intersect?



Я хочу, чтобы таблица a => выделила столбец a,b,c, Где d=1

Я хочу, чтобы таблица b => выберите a,b,c



Я хочу сделать пересечение и найти общие столбцы a, b, C. И я хочу вернуть эти столбцы с foreach.

Что я уже пробовал:

ВАР таблицы tablea: MyStudentEntities.Выберите(x=> new
{
Колумна=х.Колумна
Столбца columnb=х.Столбца columnb
ColumnC=x.ColumnC

}).Where(x=>x.ColumnD=1); //эта строка не выполняется

ВАР таблице tableb:
MyStudentEntities.Select(x=> new 
{
   ColumnA=x.ColumnA
   ColumnB=x.ColumnB
   ColumnC=x.ColumnC

}).ToList();

foreach(var item in intersect)
{


}

3 Ответов

Рейтинг:
1

AFell2

Гипотетически говоря, вы захотите сначала сделать свой выбор, а затем пересечь их. Итак, в SQL вы бы сделали это следующим образом:

SELECT 
    A.ColumnA,
    A.ColumnB,
    A.ColumnC,
    A.ColumnD
FROM tableA AS A
INNER JOIN tableB AS B
    ON A.ColumnA = B.ColumnA
    AND A.ColumnB = B.ColumnB
    AND A.ColumnC = B.ColumnC
WHERE A.ColumnD = 1

Проблема в том, что это трудно представить с помощью лямбд с классами DataEntity, главным образом потому, что трудно сформировать динамический SQL, который ORM создает на лету. Так что вы идете за следующей лучшей вещью.

Вы выбираете свой первый список сущностей из таблицы:
var studentsA = MyStudentEntitiesA
    .Where(a => a.ColumnD == 1);

Вы выбираете свою вторую сущность из таблицы b:
var studentsB = MyStudentEntitiesB
    .Where(b => studentsA.Any(a =>
        a.ColumnA == b.ColumnA &&
        a.ColumnB == b.ColumnB &&
        a.ColumnC == b.ColumnC)
    );


А теперь вы можете сделать свое заявление foreach:

foreach (var b in studentsB)
{
    Console.WriteLine($"ColumnA:{b.ColumnA}, ColumnB:{b.ColumnB}, ColumnC:{b.ColumnC}");
}


Рейтинг:
1

Aj@yGohil

Попробуйте сделать это для select from table

var selectedTableAList= (Your DB Context).tableA.Where(x => x.ColumnD == 1).Select(x => new
{
    x.ColumnA,
    x.ColumnB,
    x.ColumnC
})


Richard MacCutchan

Это второй том, в котором вы скопировали существующее решение и представили его как свое собственное. Будьте осторожны, иначе вас могут обвинить в злоупотреблениях.

Рейтинг:
0

Richard Deeming

То Where условие может использовать только свойства из проекции, с которой оно работает. Переместите Where до того, как Select (и исправьте другие синтаксические ошибки) и это сработает.

var tableA = MyStudentEntities.Where(x => x.ColumnD == 1).Select(x => new
{
    x.ColumnA,
    x.ColumnB,
    x.ColumnC
});


Maciej Los

5ed!