gpt4 book ai didi

c# - Linq Find 方法作为 IQueryable

转载 作者:太空狗 更新时间:2023-10-29 19:45:14 25 4
gpt4 key购买 nike

我的存储库中有这个,它按预期工作:

public virtual EntityClass GetById(int id)
{
return db.Set<EntityClass>().Find(id);
}

但是,我有一些表的列太多(例如:10 列,我只需要其中的 3 列)或一些表,其中有很长的文本,而且不需要提取它们。

p>

我在想是否有一种方法仍然可以通过主键进行搜索,但可能会得到一个 IQueryable 结果?或者至少可以让我做这样的事情:

var blah = myRepo.GetById(myId).Select(s => new {column 2, column 3, column 7})

最佳答案

我将创建另一个包含您想要的属性子集的类。这样应该始终清楚您正在使用什么:

public class EntityClassLite
{
public int Id {get; set;}
public string Column2 {get; set;}
public string Column3 {get; set;}
public string Column7 {get; set;}
}

然后你可以在你的存储库中有一个单独的方法:

public EntityClassLite GetLiteById(int id)
{
return db.Set<EntityClass>()
.All
.Where(e => e.Id = id)
.Select( new EntityClassLite
{
Column2 = e.Column2
Column3 = e.Column3
Column7 = e.Column7
}
.FirstOrDefault()
}

你也可以考虑使用继承:

public class EntityClass: EntityClassLite
{
public string Column1 {get; set;}
public string Column4 {get; set;}
public string Column5 {get; set;}
public string Column6 {get; set;}
public string Column8 {get; set;}
public string Column9 {get; set;}
public string Column10 {get; set;}
}

那么您将拥有两个存储库。一个用于 EntityClass,一个用于 EntityClassLite,每个都有自己的 Find 方法,每个都返回您需要的数据。

顺便说一句,我很难想象一个实体具有如此大的列以致于获取它的单个实例会导致严重的性能问题。

关于c# - Linq Find 方法作为 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450063/

25 4 0