2013-05-03 193 views
0

我总是发现自己停留在同一个地方的LINQ。我根本无法让LINQ技术坚持在我的脑海中。LINQ选择基于另一个选择

var groupIds = context.Set<UserControl>().Where(x => x.SystemUserId == System.Convert.ToInt32(userId)).Select(x => x.SystemGroupId); 
{ 
    var userGroups = context.Set<Group>().Where(g => g.GroupId) 
    { 
     groups.AddRange(userGroups.Select(sysGroup => new ToolUserGroup(sysGroup.GroupName, sysGroup.GroupId.ToString()))); 
    } 
} 

我想选择基于在UserControl ID的第一个列表中选择列表GroupId财产Group对象的列表。我根本无法弄清楚语法。

我甚至不确定用手写SQL是否容易... LINQ在我看来总是比编写SQL更加复杂和抽象。

+1

什么又是你的问题? – 2013-05-03 11:49:44

+0

很难理解你想要做什么。如果您要展示您的模型,对输入数据和期望的输出数据进行采样,这将非常有帮助。 – 2013-05-03 11:49:52

+0

只是一句话。如果您遇到LINQ问题,也许您应该尝试避免使用方法语法并使用查询语法(请参阅http://msdn.microsoft.com/zh-cn/library/bb397676.aspx)。虽然两者都应该是任意的,但我认为查询语法对于有SQL背景的人来说更容易阅读 – Offler 2013-05-03 11:54:13

回答

3

我假设,您正试图根据项目列表选择一个列表。

var groupIds = context.Set<UserControl>() 
        .Where(x => x.SystemUserId ==System.Convert.ToInt32(userId)) 
        .Select(x => x.SystemGroupId); 
        .ToList(); 

var userGroups = context.Set<Group() 
         .Where(g=>groupIds.Contains(g.GroupId)).ToList(); 
0

你可以尝试这样的事情

class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

class SubItem 
{ 
    public int Id { get; set; } 
    public int ForeignKey { get; set; } 
    public string SubName { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var sub = new List<SubItem>(); 
     var item = new List<Item>(); 

     sub.Where(s => item.Select(i => i.Id).Contains(s.ForeignKey)).ToList(); 
    } 
} 
相关问题