2010-08-18 29 views
0

我再次与一个愚蠢的问题/情景我需要建议。LINQ需要加入吗?

我有拉回一列的内容如下:

return getappropriateuserfield.tblAutoComplete 
        .Where(p => p.MemberId == memberid && p.ACItem == acitem) 
        .Select(p => p.ACColumn) 
        .Distinct() 
        .ToArray(); 

取决于这个结果,我想然后采取ACColumn结果,去tblPreferences,往下看的ColumnName,如果它匹配在里面的条目,拉回来的别名(在tblPreferences存在)

因此,举例来说,我们有tblAutoComplete:

MemberID ACItem ACColumn 
     1  2  UUF1 

tblPreferences外观像

MemberID ColumnName Alias 
     1  UUF1 Category 

如果“2”的用户枝作为ACItem,第一部分的结果将是“UUF1” - 上面的LINQ执行此操作。

我该如何改变linq,使第二部分发生,即。需要UUF1,查看tblPreferences,查看ColumnName,看到结果匹配,因此最终结果是别名,“Category”

我是否需要在2部分中执行此操作,或者可以将它作为一个查询执行使用连接?

道歉的厚度。

回答

1

貌似加盟对我来说,这可能是最容易使用查询表达式表示:

var query = from ac in foo.tblAutoComplete 
      where ac.MemberId == memberid && ac.ACItem == acitem 
      join pref in foo.tblPreferences.Where(x => x.MemberId == memberid) 
       on ac.ACColumn equals pref.ColumnName 
      select pref.Category; 

请注意,我在这里删除Distinct()电话,这意味着你可能会重复。当然,您可以在输出上放置Distinct()

结果将是IQueryable<string>(假定Category是一个字符串)。如果你需要更多的位,你可以使用匿名类型。

编辑:我编辑了查询,所以它获取一个额外的“where”子句时提取首选项。这应该等同于将MemberId添加到联接。

+0

是的加入memberId以及..可能是最好的。 – 2010-08-18 16:25:13

+0

@Ricardo:编辑。它不在联接中,而是在附加的where子句中。 – 2010-08-18 16:30:45