将sql查询转换为具有外键的表的lambda表达式

时间:2014-08-21 18:59:01

标签: c# linq sql-to-linq-conversion

我有2张桌子。一个是用户表,其中包含userid和userSelection(另一个表的外键)都是主键,因此用户可以有多行。

第二个表包含列,其主要ID为userSelection。

我想从第二个表中检索userId具有的所有userSelection行。我也想使用linq lambda表达式。

我在sql jsut中使用它无法将其转换为在c#中使用。

Select * From column 
where colID in (
                 select colId from users 
                 where userID = 'someUser')

由于

2 个答案:

答案 0 :(得分:0)

假设您正在使用实体框架,那么您真正需要的是内部联接。它看起来像这样:

from c in context.Column
join u in context.Users on c.ColId equals u.ColId
where u.UserId = 'SomeUser'
select c;

作为一个类似的lambda(语法可能缺少某些东西)(这里没有where子句,但很容易添加)

context.Column.Join( context.Users, u => u.ColId, c => c.ColId).Select

答案 1 :(得分:0)

将此代码更改为两部分

Select * From column 
where colID in (
                 select colId from users 
                 where userID = 'someUser')

第一部分获得colId列表:

var colIds = context.users.Where(x=>x.userID == "someUser").Select(x=>x.colId).ToList();

使用WhereList.Contains

获取结果
// IQueryable result
var result = context.column.Where(x=>colIds.Contains(x.colID));

您可以内联使用它,但我建议将其分为两个部分。