在表1中搜索到多个c#

时间:2018-02-07 05:02:17

标签: c# linq collections

我有2张桌子: enter image description here 如何按OTRequest

搜索所有userID

这是我目前的尝试:

var request = _otrequestRepository.Include("OTRequestUser");
var search = request.Where(x => userID.Equals(x.OTRequestUser.Select(y => y.UserID))); 

但它返回null

4 个答案:

答案 0 :(得分:0)

您对search的查询不正确。

var search = request.Where(x => userId.Equals(x.OTRequestUser.UserId));

试试这个。它会找requestOTRequestUser.UserId等于userId

----更新----

如果OTRequestUser是一个集合Request,那么我认为以下查询应该有效。

request.Where(x=>x.OTRequestUser.Any(y=>y.UserId == userId))

答案 1 :(得分:0)

试试这个,其中UserId是你提到的参数

var search = request.Where(x => x.OTRequestUser.any(y=> y.UserId == UserId));

答案 2 :(得分:0)

试试这个:

var searchResult = request.Where(request => request.OTRequestUser
                                           .Any(RequestUser => RequestUser.UserId == paramUserId))
                                           .ToList();

答案 3 :(得分:0)

在我看来,您的表位于数据库中。 UsersRequests之间存在一对一的关系:每个User都有零个或多个Requests,而每个Request只属于一个User { {1}}。

在数据库中,通常通过向Request提供User外键来实现。通常,此外键的名称类似于UserId。它不在您的表格中,但是您在查询中使用它,我假设每个Request都有一个外键,其属于User属于UserId

查询的输入值为userId,您想要的输出是Requests的{​​{1}} UseruserId。如果此User没有Id您想要一个空集合。

int userId = ...
IQueryable<User> users = ...
IQueryable<Request> requests = ...
var result = users                      // from all users
    .Where(user => user.Id == userId)   // take the ones with Id equal to userId
    .Join(requests,                     // join the result with requests
        user => user.Id,                // from every user take Id
        request => request.UserId,      // from every request taks UserId
        (user, request) => new          // when they match create a new object
        {
            // take only the user properties you plan to use
            Name = user.Name,
            ...
            // take only the request properties you plan to use:
            Title = request.Title,
            ...
        })  
     .SingleOrDefault();