假设我有一个左外连接:
from f in Foo
join b in Bar on f.Foo_Id equals b.Foo_Id into g
from result in g.DefaultIfEmpty()
select new { Foo = f, Bar = result }
Run Code Online (Sandbox Code Playgroud)
如何使用扩展方法表达相同的任务?例如
Foo.GroupJoin(Bar, f => f.Foo_Id, b => b.Foo_Id, (f,b) => ???)
.Select(???)
Run Code Online (Sandbox Code Playgroud) 我在使用LINQ to SQL找出如何使用多个左外连接时遇到了一些麻烦.我理解如何使用一个左外连接.我正在使用VB.NET.下面是我的SQL语法.
T-SQL
SELECT
o.OrderNumber,
v.VendorName,
s.StatusName
FROM
Orders o
LEFT OUTER JOIN Vendors v ON
v.Id = o.VendorId
LEFT OUTER JOIN Status s ON
s.Id = o.StatusId
WHERE
o.OrderNumber >= 100000 AND
o.OrderNumber <= 200000
Run Code Online (Sandbox Code Playgroud) 如何将此SQL正确转换为linq
select t1.ProgramID
from Program t1 LEFT JOIN ProgramLocation t2 ON t1.ProgramID = t2.ProgramID
where t2.ProgramID IS NULL
Run Code Online (Sandbox Code Playgroud)
我尝试过,但它不起作用
var progy = (
from u in db.ProgramLocations join b in db.Programs
on u.ProgramID equals b.ProgramID into yG
from y1 in yG.DefaultIfEmpty()
where u.ProgramID == null
where u.ProgramID == null
select u.ProgramID
).ToList();
Run Code Online (Sandbox Code Playgroud)
谢谢
我的应用程序中有 2 个数据表。第一个 DataTable 被调用Table1
,看起来像这样
-------------------------------------
| Key | Column1 | Column2 | Foreign |
|-----------------------------------|
| 0 | dsfsfsd | sdfsrer | 1 |
|-----------------------------------|
| 1 | dertert | qweqweq | NULL |
|-----------------------------------|
| 2 | prwersd | xzcsdfw | 3 |
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
第二个被调用Table2
,看起来像这样
----------------------------------------
| Key | Column3 | Column4 | Column5 |
|--------------------------------------|
| 1 | dsfsfsd | sdfsrer | fghfghg |
|--------------------------------------|
| 3 | prwersd | xzcsdfw | nbmkuyy …
Run Code Online (Sandbox Code Playgroud) 我需要在 LINQ 中编写以下 T-SQL:
SELECT T1.ID, T2.Name
FROM T1
LEFT JOIN T2 ON (T1.ID = I2.ID1 OR T1.ID = T2.ID2)
Run Code Online (Sandbox Code Playgroud)
OR 连接在 LINQ 中如下所示:
T1.Join(T2, t1=>new{}, t2=>new{}, (t1,t2)=>new{ID=t1.Id, t2=t2}).Where(o=>o.Id == o.t2.Id1 || o.Id==o.t2.Id2);
Run Code Online (Sandbox Code Playgroud)
但该查询是 INNER JOIN,而不是 LEFT JOIN。某种 LEFT JOIN 看起来像这样:
T1.GroupJoin(T2, t1 => t1.Id, t2 => t2.Id1, (t1, t2) => new { Id = t1.Id, Name1 = t2.Select(t => t.Name) }).DefaultIfEmpty()
.GroupJoin(T2, o => o.Id, t2 => t2.Id2, (i, j) => new { Id = i.Id, Name1 = i.Name1, …
Run Code Online (Sandbox Code Playgroud) 我尝试将两个集合合二为一.如果我的第二个是空的,我只需要一个空值,这是我的代码(如果com
不为空则它是正确的)
var tmp = List{ Elem {long UserID; string tmpContent} };
var com = List{ Comment{long UserID; string Content} } ;
var res = from t in tmp
group t by t.UserID into g
join c in com on g.Key equals c.UserID
select new AnswerSet(new List<Answer>(g), c.Content);
Run Code Online (Sandbox Code Playgroud)
我想获得AnswerSet(g, Content)
欧AnswerSet(g, null)
的问题,我想,是g.Key equals c.UserID
时候com是空的