LLBLGen通过非主键字段加载不同项



我一直在尝试通过表中的非主键字段从LLBLGen加载单个项。

我只能计算出如何在FetchEntity上对主键进行文件管理。

要过滤非主键,我必须获取集合并使用linq来获取第一个。这感觉就像一股气味,我想知道是否有更好的方法?

public BinLocationEntity GetDefaultBinLocation(string firstName, string lastName)
{

var persons = new EntityCollection<PersonEntity>();
var filter = new RelationPredicateBucket();
filter.PredicateExpression.Add(PersonFields.FirstName == firstName);
filter.PredicateExpression.Add(PersonFields.LastName== lastName);
using (var adapter = this.DataAccessAdapter)
{
adapter.FetchEntityCollection(persons , filter);
}
return persons .First();
}

我知道演示代码在现实世界中会很糟糕,它只是一个例子

您还可以通过唯一约束提取:

https://www.llblgen.com/Documentation/5.6/LLBLGen%20Pro%20RTF/Using%20the%20generated%20code/Adapter/gencode_usingentityclasses_instantiating.htm#using-a-唯一约束值

使用不是主键和唯一约束的字段(直接(获取单个实体没有多大意义。生成的代码无法知道查询在逻辑上应该返回一个实体。

在这些情况下使用Linq.First((是完全合适的,根本不是代码/设计的味道。

我唯一想添加到您的答案中的是,如果您确实希望查询只返回一个结果,那么您可以将FetchEntityCollection((调用更改为:

adapter.FetchEntityCollection(persons , filter, 1);

以将结果具体限制为0行或1行。第一个结果很可能是您想要的结果,但如果没有提供任何上限,则此查询可能返回数千行或更多行,这可能会对性能造成巨大影响。

最新更新