使用 Linq 内部连接两个数据 table 而与另一个 table 没有关系

Inner Join Two Datatable using Linq without having relation with another table

我想加入两个 datatable 喜欢

select * from table1 Inner join table2 on table2.id in (1,2,3)

注意:没有像table1.id=table2.id

这样的关系

我有Linq代码但是不知道怎么写condition请帮忙

var JoinResult = (from p in table1 .AsEnumerable()
                              join t in table2 .AsEnumerable()
                              on p.Field<int>("id") equals t.Field<int>("id") 
                              select new
                              {
                                  ID = p.Field<int>("ID")                                     

                              }).ToList();

我没有上述 on table1.id= table2.id 关系。

如果您从数据库生成 linq 类,您将能够像这样进行操作:

var JoinResult = from t1 in _context.table1
            join t2 in _context.table2 on t1.id equals t2.id
            select new 
            { 
               Id = t1.id
            };

其中 _context - 是您的数据库。

默认情况下LinQ 中的所有联接都是内部联接

如果您使用 LinqToSQL,请不要使用 .AsEnumerable()。这基本上会将整个 table 从数据库填充到您的内存中。

如果表之间没有关系,则不需要任何连接。

你可以用这个。

            var Result = (from p in table1 .AsEnumerable()
                          from t in table2 .AsEnumerable()
                          where (t.id==1 || t.id==2)
                          select new
                          {
                              //whatever data you want.
                              ID = p.Field<int>("ID")                                     

                          }).ToList();

希望对您有所帮助。

我认为你可以 contains。请试试这个:

        selectList={1,2,3}//type of list (List<int>)

        var JoinResult = (from t1 in table1.AsEnumerable()
                      from t2 in table2.AsEnumerable
                      where (t2 => selectList.Contains(t2.id))
                      select new
                      {      
                          //what if you want take here
                          ID = p.Field<int>("ID")                                     

                      }).ToList();

这里

select * from table1 Inner join table2 on table2.id in (1,2,3)

从技术上讲,table2.id in (1,2,3)只是一个过滤器(where),并没有Inner Join,而是Cross Join,即没有连接(关系)表,而是两者的笛卡尔积。

原来是这样的

select * from table1, table2 where table2.id in (1,2,3)

因此将其转换为 LINQ 可能是这样的

var t2Filter = new HasSet<int>(new int[] { 1, 2, 3});
var result = (
    from t1 in table1.AsEnumerable()
    from t2 in table2.AsEnumerable()
    where t2Filter.Contains(t2.Field<int>("id"))
    select new
    {
        ID = t1.Field<int>("ID")
        // ...
    }
).ToList();