我有一个数据库表类似于下图中的一个
我将传递UserId以及2个字符串。对于具有相似签名的APi的Ex:userId:1,key1:h1,key2:h2。
Public List<T> CheckValuesForUser(string userId, string key1, string key2)
我需要检查特定的userId 1是否同时具有h1和h2值。如果用户没有两个键,则查询应返回null。
我已经尝试过以下查询,
context.tableName.where(i=> i.value.Equals("h1") && i.value.Equals("h2"))
-这什么也不会返回。我假设对每行执行此谓词。Context.tableName.Where(i=> new string[]{ Key1,Key2 }.Contains(i.Value))
-即使用户没有Key2的值,它也会返回一个值。如果用户没有两个键,我需要得到一个NULL结果。var list1= Context.tableName.Where(i=> i.Value.Equals(key1)).toList(); var list2= Context.tableName.Where(i=> i.Value.Equals(Key2)).toList(); if(list1.Count > 0 && list2.Count > 0) list1.AddRange(list2);
有人可以帮我找到更好的解决方案吗?我正在使用Asp.Net Core 2.2
由于h1和h2条目是单独的记录,因此您将需要独立检查两个值。
// Group the records by the expected UserId
var groupedRecords = context
.TableName
.Where(t => t.UserId == userId)
.GroupBy(t => t.UserId);
// Ensure both the required records exist within the grouping
var hasRequiredRecords = groupedRecords.Any(i => i.Value.Equals("h1"))
&& Any(i => i.Value.Equals("h2"))
// Now that you know you have the required values, return them
return groupedRecords.Where(i => i.Value.Equals("h1") && i.Value.Equals("h2");
最后一行将仅返回带有值h1
&的两个记录(作为单个h2
提供的userId
提供)List<T>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句