2013-05-03 166 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(); 
    } 
} 
相關問題