如何将像这样的多个条件转换为lambda

时间:2017-05-03 02:29:27

标签: c# entity-framework lambda

你好我们的目标是用这个查询做一个lamba表达式,并且我有点卡住我以前必须做一些简单的lambdas现在我需要做一个多重条件混合或者和这个中的ands和这个有点新

所以,让我们解释一下这个结构,你会发现为什么是棘手的(至少对于lambda的新手来说)。我有请求,其中请求具有许多属性,属性具有名称和值,因为根据请求状态,它们在这种情况下具有不同的属性" RequestState.APPROVAL_PENDING"是一个常量,它将使正确的状态和属性名称与具有我需要的属性名称的常量进行比较,并且值需要在属性值中找到wwid。

然后我会做一个query.tolist();并获得所有请求。但我需要找出如何lambda这个。我有点卡住了。我会在这里得到任何帮助和/或技巧。

var query = from request in DBContext.REQUESTs
                        join attr in DBContext.REQUEST_ATTRIBUTES on request.REQUEST_ID equals attr.REQUEST_ID
                        where (attr.ATTRIBUTE_VALUE == wwid && 
                        (attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_2_WWID || attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_WWID))
                        && request.STATE_ID == RequestState.APPROVAL_PENDING
                        select request;

感谢

2 个答案:

答案 0 :(得分:0)

var query = DBContext.REQUESTs.Where(request => request.STATE_ID == RequestState.APPROVAL_PENDING)
                        .Join(DBContext.REQUEST_ATTRIBUTES.Where(attr => attr.ATTRIBUTE_VALUE == wwid &&
                                (attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_2_WWID || attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_WWID)),
                            request => request.REQUEST_ID,
                            attr => attr.REQUEST_ID,
                            (request, attr) => request);

答案 1 :(得分:0)

这是另一种做法。

从Request到RequestAttributes创建导航属性:

 public class Request
{
    .... Properties...
    public virtual ICollection<RequestAttribute> RequestAttributes { get; set; }
}
public class RequestAttribute
{
    .... Properties...
    public virtual Request> Request { get; set; }
}

这将创建从Request到RequestAttributes的一对多关系。您的查询变为:

var query = DBContext.REQUESTs.Where(r=> r.REQUEST_ATTRIBUTES.Any(attr=>attr.ATTRIBUTE_VALUE == wwid && 
                    (attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_2_WWID || attr.ATTRIBUTE_NAME == RequestAttributes.APPROVER_WWID))
                    && r.STATE_ID == RequestState.APPROVAL_PENDING)
                    .Select(r=> r);