【发布时间】:2013-08-19 16:34:35
【问题描述】:
我需要获取实体集合的特定属性的不同值列表。
因此,假设表 A 具有字段 x、y、z、1、2、3,其中 x 是 PK(因此不在表中)。
我需要获取 y、z、1、2 或 3 的所有唯一值,而不必在我的方法中知道要获取哪个字段。所以该方法的模式是:
public List<ObjectName> GetUniqueFieldValues(string fieldname)
“ObjectName”对象是一个有两个属性的对象,上面的方法会为每个结果填充至少一个属性。
另一个问题中的某个人使用 ParameterExpression 和 Expression 类有类似的答案,但并没有真正提供足够的信息来帮助我完成特定任务。
我也尝试过反射,但当然 Linq 不太喜欢在 Select 表达式中这样做。
我只会使用 if 并称其为好,但实际表/对象中确实有大量字段/属性,所以这是不切实际的。如果基表发生变化,这也可以为我节省一些重构。
我正在尝试做的 SQL 版本:
SELECT Distinct [usersuppliedfieldname] from TableName where [someotherconditionsexist]
我已经拥有的伪代码:
public List<ReturnObject> GetUniqueFieldValues(int FkId, ConditionObject searchmeta)
{
using(DbEntities db = new DbEntities())
{
// just getting the basic set of results, notice this is "Select *"
var results = from f in db.Table
where f.FkId == FkId && [some static conditions]
select f;
// filtering the initial results by some criteria in the "searchmeta" object
results = ApplyMoreConditions(results, searchmeta);
// GOAL - Select and return only distinct field(s) specified in searchmeta.FieldName)
}
}
【问题讨论】:
-
这样的查询往往不适合在 LINQ 中开始。只需在不使用查询提供程序的情况下执行查询,或者如果您愿意,也可以使用微 ORM,当您的查询本身是静态的或 EF 设计支持的动态查询时,请使用 EF。
-
@AlexPaven - 这很像我在我的问题中提到的那个对我不起作用。我将编辑帖子,更详细地说明我正在寻找的内容。
-
@Servy - 我也会调查一下,谢谢!
-
你知道...这可能是矫枉过正。重点是进行基于元数据的搜索并根据返回的字段动态构建选项列表......如果我已经获得搜索结果,我可能可以在客户端进行所有这些过滤并为自己节省很多这里有麻烦。
标签: c# linq entity-framework-5