使用带有where子句的lambda的linq groupjoin

时间:2013-01-13 03:40:08

标签: linq join lambda

我需要使用Lambda添加连接,如果我有另一个可用的参数,也将在where子句中使用。

我的问题是我不确定添加新对象MemberTagLysts的确切格式,以及如何创建where子句。

    var tagList =   from t in dc.Tags
    join b in dc.Businesses on t.BusinessId equals b.BusinessId
            where t.IsActive == true
            where b.IsActive == true
            orderby t.AdImage descending
            select new TagItem
            {
                    tagName = t.Name.Replace("\"", ""),
                    tagImage = tagImagePath + t.AdImage.Replace("\"", ""),
                    tagDescription = t.Description.Replace("\"", "")
            };

            if (!string.IsNullOrEmpty(lystId))
            {
                            tagList = (IQueryable<TagItem>)tagList.GroupJoin(dc.MemberTagLysts, a => a.tagId, b => b.TagId, (a, b) => new { a, b });
            }

1 个答案:

答案 0 :(得分:1)

我想你想做这样的事情:

var tagList =   from t in dc.Tags
    join b in dc.Businesses on t.BusinessId equals b.BusinessId
    where t.IsActive
    where b.IsActive
    orderby t.AdImage descending
    select new TagItem
    {
            tagName = t.Name.Replace("\"", ""),
            tagImage = tagImagePath + t.AdImage.Replace("\"", ""),
            tagDescription = t.Description.Replace("\"", "")
    };

if (!string.IsNullOrEmpty(lystId))
{
    tagList = tagList
             .GroupJoin(dc.MemberTagLysts.Where(l => l.lystId == lystId),
                        a => a.tagId,
                        b => b.TagId,
                        (a, b) => new { a, b }));
}

有条件地扩展查询是一种很好的做法。请注意,像where t.IsActive == true这样的条件是多余的,where t.IsActive就足够了,可以通过精心选择的属性名称(如您所知)更好地阅读。