LINQ加入需要吗?

时间:2010-08-18 16:11:56

标签: linq join

我再次提出一个愚蠢的问题/场景我需要建议。

我有以下内容可以撤回列的内容:

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,看到结果匹配所以最终结果是Alias,“Category”

我是否需要分两部分执行此操作,还是可以将其作为一个查询执行,可能使用联接?

厚度道歉。

1 个答案:

答案 0 :(得分: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添加到连接中。

相关问题