基于非主键的ef核心查询
Ef core query based on non primary key
Net Core 和 EF Core DB 优先方法。我有一个 table 并且它有一个主键 Id 和一个非主键的国家名称。我想查询国家名称,我不会传递主键。下面是我的实现。
IBaseRepository.cs
public interface IBaseRepository<T>
{
async Task<T> GetCountryByNameAsync(string country)
}
BaseRepository.cs
public class BaseRepository<T>: IBaseRepository<T>
where T : class
{
private readonly DbContext dbContext;
private readonly DbSet<T> dbSet;
public BaseRepository(DbContext dbContext)
{
this.dbContext = dbContext;
this.dbSet = dbContext?.Set<T>();
}
public async Task<T> GetCountryByNameAsync(string country)
{
return await this.dbSet.FindAsync(id).ConfigureAwait(false); //This will return based on the countryId
//I want select * from country where countryname = country
}
}
在上面的实现中,我可以通过 id(主键)获取国家,但我想根据国家名称进行查询。我想弄明白。有人可以指导我如何实现这一目标。任何帮助将不胜感激。谢谢
只需使用 FirstOrDefaultAsync
public async Task<T> GetCountryByNameAsync(string country)
{
return await this.dbSet<Country>.FirstOrDefaultAsync(c=>c.Countryname == country).ConfigureAwait(false);
}
如果您想要获取具有所提供国家/地区名称的第一个元素,请使用 FirstOrDefault
方法。然后检查 returned 值是否为 null
(如果 countryName
不存在,return 将为 null)。
public async Task<T> GetCountryByNameAsync(string country)
{
var country = await this.dbSet<T>.FirstOrDefault(c=>c.Countryname == country);
return country;
}
Net Core 和 EF Core DB 优先方法。我有一个 table 并且它有一个主键 Id 和一个非主键的国家名称。我想查询国家名称,我不会传递主键。下面是我的实现。
IBaseRepository.cs
public interface IBaseRepository<T>
{
async Task<T> GetCountryByNameAsync(string country)
}
BaseRepository.cs
public class BaseRepository<T>: IBaseRepository<T>
where T : class
{
private readonly DbContext dbContext;
private readonly DbSet<T> dbSet;
public BaseRepository(DbContext dbContext)
{
this.dbContext = dbContext;
this.dbSet = dbContext?.Set<T>();
}
public async Task<T> GetCountryByNameAsync(string country)
{
return await this.dbSet.FindAsync(id).ConfigureAwait(false); //This will return based on the countryId
//I want select * from country where countryname = country
}
}
在上面的实现中,我可以通过 id(主键)获取国家,但我想根据国家名称进行查询。我想弄明白。有人可以指导我如何实现这一目标。任何帮助将不胜感激。谢谢
只需使用 FirstOrDefaultAsync
public async Task<T> GetCountryByNameAsync(string country)
{
return await this.dbSet<Country>.FirstOrDefaultAsync(c=>c.Countryname == country).ConfigureAwait(false);
}
如果您想要获取具有所提供国家/地区名称的第一个元素,请使用 FirstOrDefault
方法。然后检查 returned 值是否为 null
(如果 countryName
不存在,return 将为 null)。
public async Task<T> GetCountryByNameAsync(string country)
{
var country = await this.dbSet<T>.FirstOrDefault(c=>c.Countryname == country);
return country;
}