使用 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();
我想加入两个 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();