LLBL GEN PRO 3.1 Select 不同的两个字段
LLBL GEN PRO 3.1 Select distinct two fields
是否可以在 LLBL GenPro 3.1 中对两个字段使用 DefineField
和 AggregateFunction.SumDistinct
?
例如我有这个:
ResultsetFields myFields = new ResultsetFields(2);
//I want this amount to be distinct but with specific userId
myFields.DefineField(UserFields.Amount, 0, AggregateFunction.SumDistinct);
myFields.DefineField(UserFields.Id, 1, "ResultCount", AggregateFunction.CountDistinct);
在 SQL 中,我希望它以这样的方式结束:
SELECT DISTINCT SUM(u.Amount), u.Id
FROM Users u
INNER JOIN someOtherTablesat ON sot.UserId = u.Id
GROUP BY
u.Id
我在 LLBL 中加入的这个连接数量重复,因为 someOtherTable
同一用户的数据很少。由于其他原因,我需要加入。
那么,是否可以使用 LLBL 来做到这一点?如何做到这一点?
最后我找到了解决方案:
var fields = new ResultsetFields(1);
fields.DefineField(OrderFields.Freight, 0, AggregateFunction.Sum);
var bucket = new RelationPredicateBucket();
bucket.PredicateExpression.Add(new FieldCompareSetPredicate(
OrderFields.OrderId, null, OrderDetailFields.OrderId, null,
SetOperator.In, (OrderDetailFields.ProductId ==1)));
DataTable dynamicList = new DataTable();
using (var adapter = new DataAccessAdapter())
{
adapter.FetchTypedList(fields, dynamicList, bucket);
}
在 SQL 中更像是
Select SUM(Freight) from Orders
Where OrderID IN
(
Select OrderID from [Order Details] where ProductID = 1
)
是否可以在 LLBL GenPro 3.1 中对两个字段使用 DefineField
和 AggregateFunction.SumDistinct
?
例如我有这个:
ResultsetFields myFields = new ResultsetFields(2);
//I want this amount to be distinct but with specific userId
myFields.DefineField(UserFields.Amount, 0, AggregateFunction.SumDistinct);
myFields.DefineField(UserFields.Id, 1, "ResultCount", AggregateFunction.CountDistinct);
在 SQL 中,我希望它以这样的方式结束:
SELECT DISTINCT SUM(u.Amount), u.Id
FROM Users u
INNER JOIN someOtherTablesat ON sot.UserId = u.Id
GROUP BY
u.Id
我在 LLBL 中加入的这个连接数量重复,因为 someOtherTable
同一用户的数据很少。由于其他原因,我需要加入。
那么,是否可以使用 LLBL 来做到这一点?如何做到这一点?
最后我找到了解决方案:
var fields = new ResultsetFields(1);
fields.DefineField(OrderFields.Freight, 0, AggregateFunction.Sum);
var bucket = new RelationPredicateBucket();
bucket.PredicateExpression.Add(new FieldCompareSetPredicate(
OrderFields.OrderId, null, OrderDetailFields.OrderId, null,
SetOperator.In, (OrderDetailFields.ProductId ==1)));
DataTable dynamicList = new DataTable();
using (var adapter = new DataAccessAdapter())
{
adapter.FetchTypedList(fields, dynamicList, bucket);
}
在 SQL 中更像是
Select SUM(Freight) from Orders
Where OrderID IN
(
Select OrderID from [Order Details] where ProductID = 1
)