如何使用过滤器从 EF 中的多个表中查询数据

问题描述 投票:0回答:1

如何使用 EF 和 LINQ 查询和筛选多个表中的数据。

我的课程:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Email { get; set; }
    public int Age { get; set; }
    public List<Character> Characters { get; set; }
}

public class Character
{
    public int Id { get; set; }
    public string Name { get; set; }
    [JsonIgnore]
    public User user { get; set; }
    public int UserId { get; set; }
}

1个用户可以拥有多个角色。 我需要像 SQL 这样的 LINQ C# 代码:

select * from Users usr
join Character ch on usr.id = ch.UserId
where usr.Name == "String" 
or usr.Email == "String"
or ch.Name == "String"

我尝试了.Include.Where(),但没有完全理解它是如何工作的。我想看一个例子。

c# entity-framework linq linq-to-sql
1个回答
0
投票

您可以通过执行联接操作并应用过滤条件,使用实体框架 (EF) 和 LINQ 查询和过滤多个表中的数据。在您的情况下,您希望根据某些条件从用户表和字符表中检索数据。以下是使用 LINQ 的方法:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore;

// Your DbContext class that represents your database context
public class YourDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Character> Characters { get; set; }

    // Your DbContext configuration here...
}

// ...

// Inside your application logic or method
public List<User> GetFilteredUsers(string filterString)
{
    using (var dbContext = new YourDbContext())
    {
        var query = from user in dbContext.Users
                    join character in dbContext.Characters
                    on user.Id equals character.UserId
                    where user.Name.Contains(filterString) ||
                          user.Email.Contains(filterString) ||
                          character.Name.Contains(filterString)
                    select user;

        return query.ToList();
    }
}

创建 DbContext 类的实例(在本例中为 YourDbContext)以连接到数据库。

使用 LINQ 根据 UserId 关系在 Users 和 Characters 表之间执行联接操作。

使用 where 子句应用过滤条件来选择姓名、电子邮件或角色名称包含指定过滤字符串的用户。

最后,调用 .ToList() 执行查询并以列表形式检索过滤后的用户。

您可以使用过滤字符串作为参数调用 GetFilteredUsers 方法来检索符合您条件的用户。根据需要调整过滤条件以满足您的具体要求。

请记住适当配置 DbContext 和连接字符串以建立与数据库的连接。

© www.soinside.com 2019 - 2024. All rights reserved.