レコードに差がある平均のカテゴリのみをリストしたいとします。group byとlinqで複数の結合を持つフィールドにアクセスすることはできません
この違いは、2つのテーブルに存在します。TestOperation、TestOperationDifference
私は3以下のフィールドの平均値を計算したい:このような
TestOperation:DiffPerc
If DiffPerc < 100
"Difference is there and take value of DiffPerc to calculate average"
else
"Dont take that record"
TestOperationDifference:DiffPerc,DiffRec
If DiffPerc < 100
"Difference is there and take value of DiffPerc and DiffRec to calculate average"
else
"Dont take that record"
finalAverage=(
Average(TestOperation.DiffPerc)
+ Average(TestOperationDifference.DiffPerc)
+ Average(TestOperationDifference.DiffRec)
)/3
出力:
[0]=Mobile
Electronics
FinalAverage=30.00
[1]=Shoes
Sports
FinalAverage=70.00
.
.
.
マイコード:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public Nullable<int> ParentId { get; set; }
public virtual ICollection<Variants> Variants { get; set; }
}
public class Variants
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public int CategoryId { get; set; }
public virtual ICollection<SubVariants> SubVariants { get; set; }
public virtual Category Category { get; set; }
}
public class SubVariants
{
public int Id { get; set; }
public int VariantId { get; set; }
public string Name { get; set; }
public virtual Variants Variants { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference1 { get; set; }
public virtual ICollection<TestOperation> TestOperation { get; set; }
public virtual ICollection<TestOperation> TestOperation1 { get; set; }
}
public class Test
{
public int Id { get; set; }
public string Version { get; set; }
public virtual ICollection<TestOperation> TestOperation { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference { get; set; }
}
public class TestOperation
{
public int Id { get; set; }
public Nullable<int> TestId { get; set; }
public int SourceSubVariantId { get; set; }
public int TargetSubVariantId { get; set; }
public decimal DiffPerc { get; set; }
public virtual SubVariants SubVariants { get; set; }
public virtual SubVariants SubVariants1 { get; set; }
public virtual Test Test { get; set; }
}
public class TestOperationDifference
{
public int Id { get; set; }
public Nullable<int> TestId { get; set; }
public int SourceSubVariantId { get; set; }
public int TargetSubVariantId { get; set; }
public decimal DiffPerc { get; set; }
public decimal DiffRec { get; set; }
public virtual SubVariants SubVariants { get; set; }
public virtual SubVariants SubVariants1 { get; set; }
public virtual Test Test { get; set; }
}
マイクエリ:
var query = from cat in context.Category
join v in context.Variants on cat.Id equals v.CategoryId
join sv in context.SubVariants on v.Id equals sv.VariantId
join to in context.TestOperation on sv.Id equals to.SourceSubVariantId
join tod in context.TestOperationDifference on sv.Id equals tod.SourceSubVariantId
where
(to.DiffPerc < 100)
||
(tod.DiffPerc < 100)
group cat by new {catid = cat.Id} into grp
select new
{
subcategoryname=grp. //not getting property here
ParentCategoryName=grp.
FinalAverage=
}
しかし、ここでは上記のクエリでは、私はサブカテゴリ名にアクセスしようとしていますし、私は それにアクセスすることはできませんよ。
デモフィドル:Code Fiddle
誰もがこれで私を助けることはできますか?
新しい匿名クラスを作成するときにかっこを入れているのはなぜですか? – dotctor
@dotctor:Okは私の質問を更新しました –
あなたはあなたのクエリを 'grp'にグループ化しました。 'grid.Key'には' catid'プロパティがあります。どちらの物件をお探しですか? – dotctor