1

次のSQLクエリをラムダ式に変換する方法は?

select cg.Code, ci.ChangeType, SUM(oc.Value) from OtherCharges oc 
left join changeitems ci on oc.ChangeItemKey = ci.ChangeItemKey
left join ChangeGroups cg on ci.ChangeGroupKey = cg.ChangeGroupKey
where OtherKey = 'AB235A00-FEB2-4C4F-B0F9-3239FD127A8F'
group by cg.Code, ci.ChangeType
order by cg.Code, ci.ChangeType
4

1 に答える 1

2

テーブルの .NET ドメイン タイプが既にあると仮定します。

IQueryable<OtherCharges> otherCharges = ...
Guid otherKey = ...

var query = otherCharges.Where(oc => oc.OtherKey == otherKey)
    .Select(oc => new { oc.ChangeItem, oc.Value })
    .GroupBy(t => new { t.ChangeItem.ChangeGroup.Code, t.ChangeItem.ChangeType })
    .OrderBy(g => g.Key.Code)
    .ThenBy(g => g.Key.ChangeType)
    // note that if Code is a non-nullable type you'll want to cast it to int? at some
    // point so that when pulled into memory EF won't complain that you can't cast
    // null to a non-nullable type. I expect that Code could sometimes be null here
    // do to your use of LEFT OUTER JOIN in the T-SQL
    .Select(g => new { g.Key.Code, g.Key.ChangeType, Sum = g.Sum(t => t.Value) });

var inMemoryResult = query.ToList();

ここでは、OtherCharge.ChangeItem と ChangeItem.ChangeGroup を使用していることに注意してください。これらは関連付けプロパティであり、モデルの一部として設定する必要があります (たとえば、最初に EF コードの流暢な構成を使用します)。

于 2012-09-16T20:33:47.357 に答える