1

OK、これをどのように尋ねるかはよくわかりませんが、基本的には、次のようなジェネリック リスト (Of T) にプロパティを持つことができるカスタム コレクション クラスを作成したいと考えています。

Public ReadOnly Property TotalCalories() As Decimal
        Get
            Dim decTotal As Decimal = 0D
            For Each thisFoodDiaryItem As FoodDiaryItem In Me
                Dim thisNutValue As NutritionalData = (From nd In thisFoodDiaryItem.Food.NutritionalDatas Where nd.NutritionalDefinitionID = 208).FirstOrDefault
                If thisFoodDiaryItem.Food.FoodWeights.Count > 0 Then
                    Dim decWeight As Decimal = thisFoodDiaryItem.Food.FoodWeights(0).WeightInGrams
                    If Not thisNutValue Is Nothing Then
                        Dim decCalories As Decimal = Math.Round((thisNutValue.Value * (decWeight / 100)) * thisFoodDiaryItem.Amount)
                        decTotal += decCalories
                    End If
                End If
            Next
            Return decTotal
        End Get
    End Property

    Public ReadOnly Property TotalSugars() As Decimal
        Get
            Dim decTotal As Decimal = 0D
            For Each thisFoodDiaryItem As FoodDiaryItem In Me

                Dim thisNutValue As NutritionalData = (From nd In thisFoodDiaryItem.Food.NutritionalDatas Where nd.NutritionalDefinitionID = 269).FirstOrDefault
                If thisFoodDiaryItem.Food.FoodWeights.Count > 0 Then
                    Dim decWeight As Decimal = thisFoodDiaryItem.Food.FoodWeights(0).WeightInGrams
                    If Not thisNutValue Is Nothing Then
                        Dim decCalories As Decimal = Math.Round((thisNutValue.Value * (decWeight / 100)) * thisFoodDiaryItem.Amount)
                        decTotal += decCalories
                    End If
                End If

            Next
            Return decTotal
        End Get
    End Property

エンティティ フレームワーク クエリを呼び出すときに、このクラスを使用する必要があります。

 Protected Sub BindFoodDiaryItems()
    CurrentFoodDiaryItems = New FoodDiaryItemCollection
    CurrentFoodDiaryItems = (From fdi In db.FoodDiaryItems Where fdi.PersonID = CurrentSiteUser.PersonID And fdi.EntryDate = CurrentDiaryDate).ToList


    If AllMeals Is Nothing Then
        AllMeals = (From m In db.Meals).ToList
    End If

    lvMealsA.DataSource = AllMeals
    lvMealsA.DataBind()

    lblTotalCalories.Text = CurrentFoodDiaryItems.TotalCalories.ToString
    lblTotalSugars.Text = CurrentFoodDiaryItems.TotalSugars.ToString
    lblTotalFats.Text = CurrentFoodDiaryItems.TotalFat.ToString
    lblTotalProtein.Text = CurrentFoodDiaryItems.TotalProtein.ToString
    lblTotalCarbs.Text = CurrentFoodDiaryItems.TotalCarbs.ToString


End Sub

私はそれが次のようになると仮定しています:

    Partial Public Class FoodDiaryItemCollection
    Inherits List(Of FoodDiaryItem)

    Sub New()
    End Sub

    End Class

私が得ているエラー:

タイプ 'System.Collections.Generic.List`1[NutritionBridgeModel.FoodDiaryItem]' のオブジェクトをタイプ 'NutritionBridgeModel.FoodDiaryItemCollection' にキャストできません。

ティア

4

1 に答える 1

1

.Net Framework は、Sum、Average などの多くの優れた拡張メソッドを公開しています...

http://msdn.microsoft.com/en-us/library/bb341635

例:

class Program
{
    static void Main(string[] args)
    {
        var sweetList = new List<int> { 4, 123, 5, 23, 42 };
        Console.WriteLine("Average: {0}", sweetList.Average());
        Console.WriteLine("Sum: {0}", sweetList.Sum());

        var listOfCoolObjects = new List<CoolObject>();
        listOfCoolObjects.Add(new CoolObject { Name = "1434", NeatValue = 42 });
        listOfCoolObjects.Add(new CoolObject { Name = "asdf", NeatValue = 5 });
        listOfCoolObjects.Add(new CoolObject { Name = "fgsdfg", NeatValue = 99 });
        listOfCoolObjects.Add(new CoolObject { Name = "qwerty", NeatValue = 1345 });
        listOfCoolObjects.Add(new CoolObject { Name = "casc", NeatValue = 111 });

        Console.WriteLine("Average: {0}", listOfCoolObjects.Average(x => x.NeatValue));
        Console.WriteLine("Sum: {0}", listOfCoolObjects.Sum(x => x.NeatValue));
    }
}

class CoolObject
{
    public string Name { get; set; }
    public int NeatValue { get; set; }
}

コードでは、次のようなことができます。

var sum = (From fdi In db.FoodDiaryItems Where fdi.PersonID = CurrentSiteUser.PersonID And fdi.EntryDate = CurrentDiaryDate).Sum(fdi => fdi.SomeValueYouWantToSum)

あなたが VB でコーディングしていることは知っていますが、VB についてはまったく知らないので、最後のコード チャンクの構文エラーは許してください。

于 2012-08-08T16:41:15.927 に答える