- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道有 100 万个 LINQ 问题,所以我很抱歉问这个问题。我环顾四周,我无法找到正确的答案。我怀疑这很容易,但我是 LINQ 和 EF 核心的新手。
我有以下从数据库查询返回的 Room 类型列表(为简洁起见,我只包含一个):
[
{
"roomId": 2,
"roomName": "test",
"users": [
{
"userId": 2,
"username": "seconduser",
"password": "demo",
"token": null,
"refreshToken": null,
"alias": "test",
"friends": null
},
{
"userId": 3,
"username": "thirduser",
"password": "demo",
"token": null,
"refreshToken": null,
"alias": "test",
"friends": null
}
]
}
]
伟大的。我想要一个 LINQ 查询(最好使用流畅的语法,但我很感激任何帮助),它将使用更多 Room 查询此列表并仅返回一个(我知道只会有一个)满足以下条件:
{
"friendId": 1,
"requestUserId": 3
}
上面引用的房间将被退回,没有其他的。
var requestingUser = UserService.GetSingleUser(request.RequestUserId);
var friendUser = UserService.GetSingleUser(srequest.FriendId);
var test = allRooms.FirstOrDefault(room => room.Users.Count == 2 && room.Users.Contains(friendUser) && room.Users.Contains(requestingUser);
但是,用户的比较没有通过。这只是我如何填充用户的问题吗?无论如何,我知道我不应该这样做。
var test = allRooms.First(room => room.Users.Any(user =>
user.userId == request.FriendId && user.userId == request.RequestUserId));
但这会返回 null,但我已经确认有一个房间满足我指定的条件。
public class User
{
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Token { get; set; }
public string RefreshToken { get; set; }
public string Alias { get; set; }
public ICollection<User> Friends { get; set; }
}
public class Room
{
public int RoomId { get; set; }
public string RoomName { get; set; }
public ICollection<User> Users { get; set; }
}
因此,正如我所描述的如果我手工制作表格会是什么样子,这个想法是用户和房间是不同的实体(主要实体),并且会有一个连接表来表明它们的关系。从概念上讲,用户在房间里。
var allRooms = db.Rooms.Include(x => x.Users).ToList();
因此,要求具有上述条件的房间应该不会太难。
最佳答案
这个很近
room => room.Users.Any(user =>
user.userId == request.FriendId && user.userId == request.RequestUserId)
但需要一些调整
&&
) 运算符不合适 - id 不能同时等于传递的两个 id。它应该是一个或另一个,即您需要的是 Or ( ||
) 运算符Any
也不合适。它会返回一个房间,其中只有一个通过的用户,或者两者都有,但里面还有其他用户。您需要的是All
反而。All
对于空集也返回 true(即当
room.Users
为空时),所以它必须与另一个调用结合以消除这种情况
room.Users.Any() && room.Users.All(user =>
user.userId == request.FriendId || user.userId == request.RequestUserId)
这将产生所需的结果,但效率低下,因为涉及两个子查询而不是一个。
room.Users.Count(user =>
user.userId == request.FriendId || user.userId == request.RequestUserId) == 2
也可以用这样的输入更一般地表达(因为它支持超过 2 个)
// could contain more than two ids and doesn't need to be array
var userIds = new [] { request.FriendId, request.RequestUserId }.AsEnumerable();
和查询条件如
room.Users.Count(user => userIds.Contains(user.userId)) == userIds.Count()
关于c# - LINQ - EF Core - 返回包含嵌套列表中的两个对象(由属性引用)的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67377074/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!