我再次提出一个愚蠢的问题/场景我需要建议。
我有以下内容可以撤回列的内容:
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”
我是否需要分两部分执行此操作,还是可以将其作为一个查询执行,可能使用联接?
厚度道歉。
答案 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是一个字符串)。如果您需要更多位,可以使用匿名类型。