首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何人都可以修改这个LINQ to SQL查询,使其只返回每行的一个实例吗?

任何人都可以修改这个LINQ to SQL查询,使其只返回每行的一个实例吗?
EN

Stack Overflow用户
提问于 2010-09-21 06:01:25
回答 3查看 107关注 0票数 0
代码语言:javascript
复制
var nodes = (from n in db.Nodes
                 join st in db.SessionTrackings on n.NodeID equals st.NodeID
                 where st.UserID == userid && st.GroupID == groupid
                 select n);

IDictionary<int, bool> trackingData = new Dictionary<int, bool>();

foreach (Node n in nodes)
{
    trackingData.Add(new KeyValuePair<int, bool>(n.ID, true));
}

我一直收到'that key I added‘的消息,因为每个节点可能有很多SessionTrackings,但是我只想要回NodeID至少存在1个SessionTracking的所有节点,但是我不需要多次获取这些节点。如果一个节点(假设ID = 45)有4000个SessionTrackings,我的IQueryable中仍然只有1个节点45实例。我如何修改我对此的查询?请不要担心我为什么需要在字典中使用它,这就是它的方式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-21 06:07:53

您只需要告诉查询引擎,您只需要对象的不同实例:

代码语言:javascript
复制
var nodes = (from n in db.Nodes 
             join st in db.SessionTrackings on n.NodeID equals st.NodeID 
             where st.UserID == userid && st.GroupID == groupid 
             select n).Distinct();

IDictionary<int, bool> trackingData = nodes.ToDictionary(n => n.ID, n => true);

如果您不需要nodes查询来做任何其他事情,您可以像这样组合语句:

代码语言:javascript
复制
IDictionary<int, bool> trackingData =
            (from n in db.Nodes 
             join st in db.SessionTrackings on n.NodeID equals st.NodeID 
             where st.UserID == userid && st.GroupID == groupid 
             select n.Id)
            .Distinct()
            .ToDictionary(i => i, i => true);
票数 1
EN

Stack Overflow用户

发布于 2010-09-21 06:10:42

您可以通过以下方式获得第一个会话:

代码语言:javascript
复制
var nodes = (from n in db.Nodes 
    join st in db.SessionTrackings on n.NodeID equals st.NodeID 
    where st.UserID == userid && st.GroupID == groupid 
    select n)
    .GroupBy(n => n.ID)
    .Select(g => g.First());
票数 0
EN

Stack Overflow用户

发布于 2010-09-21 06:10:55

我认为你需要做一些像这样的事情

代码语言:javascript
复制
var nodeids = (from n in db.Nodes
join st in db.SessionTrackings on n.NodeID equals st.NodeId
where  st.UserId.equals(userid) && st.GroupID.equals(groupid)
select new {Id = n.Id})).distinct();

这将为您提供迭代所需的一切,而无需重复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3755865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档