我是Linq的新朋友,并且有疑问。
我有表1,在名为Aktie和Depot的列中有一些值(还有更多)。比起表2,我还有一个名为Aktie和Depot的列(还有更多)。
我的结果应该是首先选择表1中的所有行,然后我只需要表1中的行,这些行对应于表2中Aktie和Depot列的相同组合
那是我到目前为止所尝试的:
var query =
from u in _context.Table1.ToList().GroupBy(m =>
new { m.Aktie, m.Depotname }).Select(x => x.First()).OrderBy(x => x.Aktie)
join l in _context.Table2 on u.Aktie equals l.Aktie
where u.Depotname == l.DepotName
select u;
有人可以帮助我吗?结果不正确.....
答案 0 :(得分:1)
假设您要问的是如何从Table1中选择所有行,其中Table2中至少存在一行与Aktie和Depot列具有相同值的行,这是在LINQ中如何执行此操作-其中一些方法可能不适用于LINQ to SQL / Entities。每个答案均以查询和lambda / method / fluent语法提供。
// using join
var ans = from u in _context.Table1
join l in _context.Table2 on new { u.Aktie, u.Depotname } equals new { l.Aktie, Depotname = l.DepotName }
select u;
var ans2 = _context.Table1.Join(_context.Table2, u => new { u.Aktie, u.Depotname }, l => new { l.Aktie, Depotname = l.DepotName }, (u, l) => u);
// using Any
var ans3 = from u in _context.Table1
where (from l in _context.Table2 where u.Aktie == l.Aktie && u.Depotname == l.DepotName select l).Any()
select u;
var ans4 = _context.Table1.Where(u => _context.Table2.Any(l => u.Aktie == l.Aktie && u.Depotname == l.DepotName));
// using Contains
var ans5 = from u in _context.Table1
where (from l in _context.Table2 select new { l.Aktie, Depotname = l.DepotName }).Contains(new { u.Aktie, u.Depotname })
select u;
var ans6 = _context.Table1.Where(u => _context.Table2.Select(l => new { l.Aktie, Depotname = l.DepotName }).Contains(new { u.Aktie, u.Depotname }));