如何使用 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(),但没有完全理解它是如何工作的。我想看一个例子。
您可以通过执行联接操作并应用过滤条件,使用实体框架 (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 和连接字符串以建立与数据库的连接。