Linq将结果作为另一个linq查询的条件返回

时间:2013-08-29 06:33:17

标签: c# asp.net-mvc linq

var query_1 = from m in db.tableA
                        join n in db.tableB
                        on m.OwnerID equals n.OwnerID into tabA
                        from a in tabA
                        join o in db.tableC
                        on m.OwnerID equals o.OwnerID 
                        where m.UserID == userSessionID
                        && m.ActiveStatus == 1
                        select new { OwnerName = m.OwnerName };

var query_2 = from m in db.tableD
                        join n in db.tableE
                        on m.OwnerID equals n.OwnerID into tabX
                        from a in tabX
                        join o in db.tableF
                        on m.OwnerID equals o.OwnerID 
                        where {?????????????}
                        select new { ...... };

从上面的代码中,query_1将返回一个从数据库中检索的元素列表。我需要的是我只想查询query_1中的第一项并使用此元素的列作为我的query_2中的条件。所有这一切,当我使用foreach循环通过query_1获取所有元素,但这次我只想要第一项。请注意,query_1列表可能会返回null,因此不允许使用硬编码。运气好吗?

3 个答案:

答案 0 :(得分:1)

在query_1之后;

var firstOwner = query_1.FirstOrDefault() ?? string.Empty;

然后在query_2中,假设m(db.tableD)具有OwnerName属性...

where m.OwnerName = firstOwner;

版本2 ,如果您需要来自query_1的OwnerId

将其更改为

select new { OwnerName = m.OwnerName, OwnerId = m.OwnerId };

大于

var firstOwner = query_1.FirstOrDefault();
var firstOwnerId = firstOwner == null ? -1 : firstOwner.OwnerId;

和query_2

where m.OwnerId = firstOwnerId;

答案 1 :(得分:0)

您可以使用.FirstOrDefault()从第一个查询中获取第一个元素,然后根据需要使用其值。

您可能还想查看atthis

答案 2 :(得分:0)

尝试将其放在列表中然后获得最高记录为.First()?

        List<object> first = new List<object>();
        first = query_1.toList();

然后在你的query_2上把这个:

        where m.OwnerId = first.First();

编辑:

或者只是将它放在您的query_2上:

        where m.OwnerId = query_1.First();