如何仅从表1中选择在表2中具有相同值的行(C#-实体框架到实体

时间:2019-06-04 16:24:07

标签: linq-to-entities

我是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;

有人可以帮助我吗?结果不正确.....

1 个答案:

答案 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 }));