Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF Core 2、.NET Core 2:如何使用IQueryable查询同一列中的多个条件<;T>;?_C#_Entity Framework_Asp.net Core_Ef Core 2.2 - Fatal编程技术网

C# EF Core 2、.NET Core 2:如何使用IQueryable查询同一列中的多个条件<;T>;?

C# EF Core 2、.NET Core 2:如何使用IQueryable查询同一列中的多个条件<;T>;?,c#,entity-framework,asp.net-core,ef-core-2.2,C#,Entity Framework,Asp.net Core,Ef Core 2.2,我有一个类似于下图的数据库表 我将传递用户ID和2个字符串。例如:userId:1,key1:h1,key2:h2 指向具有类似签名的APi Public List<T> CheckValuesForUser(string userId, string key1, string key2) Public List checkvaluesfourser(字符串userId、字符串key1、字符串key2) 我需要检查特定的userid1是否同时具有h1和h2值。如果用户没有这两个

我有一个类似于下图的数据库表

我将传递用户ID和2个字符串。例如:userId:1key1:h1key2:h2 指向具有类似签名的APi

Public List<T> CheckValuesForUser(string userId, string key1, string key2)
Public List checkvaluesfourser(字符串userId、字符串key1、字符串key2)
我需要检查特定的userid1是否同时具有h1和h2值。如果用户没有这两个键,那么查询应该返回null

我试过下面的问题

  • context.tableName.where(i=>i.value.Equals(“h1”)和&i.value.Equals(“h2”)
    ——这不返回任何内容。我假设对每一行执行这个谓词
  • Context.tableName.Where(i=>newstring[]{Key1,Key2}.Contains(i.Value))
    --即使用户没有Key2的值,也会返回一个值。如果用户没有两个密钥,我需要得到一个空结果
  • var list1=Context.tableName.Where(i=>i.Value.Equals(key1)).toList();
    var list2=Context.tableName.Where(i=>i.Value.Equals(Key2)).toList();
    如果(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");
    

    最后一行将仅返回作为单个
    列表提供的
    用户ID
    的两条记录,其值为
    h1
    h2
    。您可以尝试使用此代码获得所需的:

    string[] keys = new string[] { key1, key2 };
    var result = (from m in context.UserInfo
                  where m.UserId == userId && keys.Any(name => name.Equals(m.Value)) select m).ToList().Count < keys.Count() ? null : 
                  (from m in context.UserInfo where m.UserId == userId && keys.Any(name => name.Equals(m.Value)) select m).ToList();
    
    string[]keys=新字符串[]{key1,key2};
    var result=(来自context.UserInfo中的m)
    其中m.UserId==UserId&&keys.Any(name=>name.Equals(m.Value))选择m.ToList().Countname.Equals(m.Value))选择m);
    

    当条件不满足时,结果接收为null,如果满足,则将相应的数据集返回到结果。

    您可以尝试
    Context.tableName.Where(i=>newstring[]{Key1,Key2}.All(x=>x==i.Value))
    它可以工作,但实际上我需要这两条记录。所以我要把它们放在两个变量中合并结果。。当我在IQueryable上使用concat时,我遇到了一个异常。@Anish我已经更新了我的答案,以返回您期望的格式的项目。