Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将属性值添加到类的现有列表的步骤_C#_Linq_Asp.net Core - Fatal编程技术网

C# 将属性值添加到类的现有列表的步骤

C# 将属性值添加到类的现有列表的步骤,c#,linq,asp.net-core,C#,Linq,Asp.net Core,有两个表格: public class Fruits { public Guid FruitId { get; set; } public string FruitName { get; set; } public string FruitType { get; set; } public string FruitColor {get; set; } } public class FruitSales { public Guid FruitSaleId

有两个表格:

public class Fruits
{
    public Guid FruitId { get; set; }
    public string FruitName { get; set; }
    public string FruitType { get; set; }
    public string FruitColor {get; set; }
}

public class FruitSales
{
    public Guid FruitSaleId { get; set; }
    //Foreign key
    public Guid FruitId { get; set; }
    public int Amount {get; set; }
}
因此,我有一个类似于下面的模型:

public class FruitsModel
{
    public Guid FruitSaleId { get; set; }
    public Guid FruitId { get; set; }
    public int FruitCount { get; set; }
    public string FruitName { get; set; }
    public string FruitType { get; set; }

}
代码如下:

var fruitSale = context.FruitSales
                .Include(i => i.Fruits);

//Here I get the FruitSaleId, FruitId and FruitCount 
var fruitCount = fruitSale.GroupBy(g => g.FruitId).Select(s => new FruitsModel
            {
                FruitSaleId = fruitSale.First().FruitSaleId ,
                FruitId = s.Key,
                FruitCount = s.Count().ToString()
            });
现在,为了获取水果名和水果类型,因为它们属于水果表,而我在前面的代码行中无法获取它们,所以我:

var tempFruit = fruitCount .ToList();

foreach (var temp in tempFruit )
{
    var res = fruitSale.Where(w => w.FruitSaleId == temp.FruitSaleId ).Select(s => new{FruitName = s.Fruit.FruitName ,FruitType = s.Fruit.FruitType }).FirstOrDefault();
    var fruitDetails = fruitCount .Where(w => w.FruitId == temp.FruitId ).FirstOrDefault();
    fruitDetails.FruitName= res.FruitName;
    fruitDetails.FruitType= res.FruitType;
}

只有水果计数的最后一个元素填充了水果名和水果类型,其余的都为空。我应该更改什么?

您可以将两个表连接起来,然后使用聚合在一个查询中获得这些内容,如下所示:

var fruitCount = fruitSale
    .Join(fruits, s => s.FruitId, f => f.FruitId, (s, f) => new {Sale = s, Fruit = f})
    .GroupBy(g => g.Sale.FruitId)
    .Select(s => 
        new FruitsModel
        {
            FruitSaleId = s.First().Sale.FruitSaleId,
            FruitId = s.Key,
            FruitCount = s.Sum(x => x.Sale.Amount),
            FruitName = s.First().Fruit.FruitName,
            FruitType = s.First().Fruit.FruitType,
            // FruitColor = s.First().Fruit.FruitColor
        });
对于一个完整的工作示例,很抱歉,我没有您的数据库,所以我用一些对象数据伪造了它

void Main()
{
    // Some selected fruits to sell
    var fruits = new List<Fruit> {
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Banana",
                FruitType = "Tropical",
                FruitColor = "Yellow"               
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Pineapple",
                FruitType = "Tropical",
                FruitColor = "Yellow"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Nectarine",
                FruitType = "Stone",
                FruitColor = "Red Yellow"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Apricot",
                FruitType = "Stone",
                FruitColor = "Yellow"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Peach",
                FruitType = "Stone",
                FruitColor = "Pinkish Yellow"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Plum",
                FruitType = "Stone",
                FruitColor = "Brownish Gray Purle"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Orange",
                FruitType = "Citrus",
                FruitColor = "Orange"
            },
            new Fruit {
                FruitId = Guid.NewGuid(),
                FruitName = "Lemon",
                FruitType = "Citrus",
                FruitColor = "Yellow"
            }
        };

    // Generate some random fruit sales for each fruit
    var random = new Random();
    var fruitSale = new List<FruitSale>();
    fruits.ForEach(f => fruitSale.Add(
        new FruitSale {
            FruitId = f.FruitId,
            FruitSaleId = Guid.NewGuid(),
            Amount = random.Next(1, 100)
        }));


    // Answer
    var fruitCount = fruitSale
        .Join(fruits, s => s.FruitId, f => f.FruitId, (s, f) => new {Sale = s, Fruit = f})
        .GroupBy(g => g.Sale.FruitId)
        .Select(s => 
            new FruitsModel
            {
                FruitSaleId = s.First().Sale.FruitSaleId,
                FruitId = s.Key,
                FruitCount = s.Sum(x => x.Sale.Amount),
                FruitName = s.First().Fruit.FruitName,
                FruitType = s.First().Fruit.FruitType,
                FruitColor = s.First().Fruit.FruitColor
            })
        .ToList();


    fruitCount.ForEach(c => Console.WriteLine($"{c.FruitSaleId}, {c.FruitId}, {c.FruitCount}, {c.FruitName}, {c.FruitType}, {c.FruitColor}"));
}

public class FruitSale
{
    public Guid FruitSaleId { get; set; }
    public Guid FruitId { get; set; }
    public int Amount { get; set; }
}

public class Fruit
{
    public Guid FruitId { get; set; }
    public string FruitName { get; set; }
    public string FruitType { get; set; }
    public string FruitColor { get; set; }
}
public class FruitsModel
{
    public Guid FruitSaleId { get; set; }
    public Guid FruitId { get; set; }
    public int FruitCount { get; set; }
    public string FruitName { get; set; }
    public string FruitType { get; set; }
    public string FruitColor { get; set; }
}
void Main()
{
//一些精选的水果出售
var=新列表{
新水果{
水果ID=Guid.NewGuid(),
水果名=“香蕉”,
果型=“热带”,
水果色=“黄色”
},
新水果{
水果ID=Guid.NewGuid(),
水果名=“菠萝”,
果型=“热带”,
水果色=“黄色”
},
新水果{
水果ID=Guid.NewGuid(),
果名=“油桃”,
水果类型=“石头”,
水果色=“红黄色”
},
新水果{
水果ID=Guid.NewGuid(),
果名=“杏”,
水果类型=“石头”,
水果色=“黄色”
},
新水果{
水果ID=Guid.NewGuid(),
furtname=“Peach”,
水果类型=“石头”,
水果色=“粉黄色”
},
新水果{
水果ID=Guid.NewGuid(),
果名=“李子”,
水果类型=“石头”,
果色=“棕灰色Purle”
},
新水果{
水果ID=Guid.NewGuid(),
水果名=“橙色”,
果型=“柑橘”,
水果色=“橙色”
},
新水果{
水果ID=Guid.NewGuid(),
水果名=“柠檬”,
果型=“柑橘”,
水果色=“黄色”
}
};
//为每个水果生成一些随机的水果销售
var random=新的random();
var fruitSale=新列表();
fruits.ForEach(f=>fruitSale.Add(
新水果销售{
果状体=f.果状体,
FroothSaleId=Guid.NewGuid(),
金额=随机。下一步(1100)
}));
//答复
var FROUTCOUNT=水果销售
.Join(fruits,s=>s.FruitId,f=>f.FruitId,(s,f)=>new{Sale=s,fruits=f})
.GroupBy(g=>g.Sale.fructId)
。选择(s=>
新水果模型
{
Frootsaleid=s.First().Sale.Frootsaleid,
果ID=s.键,
果数=s.Sum(x=>x.Sale.Amount),
水果名=s.First().Fruit.FruitName,
水果类型=s.First().Fruit.FruitType,
水果色=s.First().Fruit.FruitColor
})
.ToList();
ForEach(c=>Console.WriteLine($“{c.groutsaleid},{c.groutid},{c.groutcount},{c.groutname},{c.grouttype},{c.groutcolor}”);
}
公营水果销售
{
公共Guid ID{get;set;}
公共Guid水果ID{get;set;}
公共整数金额{get;set;}
}
公共级水果
{
公共Guid水果ID{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串{get;set;}
}
公共级水果模型
{
公共Guid ID{get;set;}
公共Guid水果ID{get;set;}
公共计数{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串{get;set;}
}

水果销售列表中对象的结构是什么?@CarloBos更新了问题。@请取消删除您最新的javascript问题: