0

私はlinqでこのクエリを書き、この作業を1-sum xとyで新しい2マイナスのタイムスパンを選択し、たとえば30の数でマルチプレイしたい

var query = 
    (from c in DB.SabtHoghoghs
     join aa in DB.SabtHesabKarmands on c.KarmandID equals aa.KarmandID
     select new 
        { 
            c.Karmand.FName,
            c.BabatMah,
            x = DB.SabtHesabKarmands.Where(q => q.BabatMah.Year == c.BabatMah.Year &&
                q.BabatMah.Month == c.BabatMah.Month && q.HesabKarmand.HesabKarmandTypeID==1)
                .Sum(aaa => aaa.Tedad * aaa.HesabKarmand.Mablagh),

            y = DB.SabtHesabKarmands.Where(q => q.BabatMah.Year == c.BabatMah.Year &&
                q.BabatMah.Month == c.BabatMah.Month && q.HesabKarmand.HesabKarmandTypeID == 2)
                .Sum(aaa => aaa.Tedad * aaa.HesabKarmand.Mablagh),

            z=y-x   //how to do this(1)

            karkard = (c.Karmand.ExitTime-c.Karmand.EnterTime).Hours *30  //how to do this(2)

        }).Distinct();
4

2 に答える 2

0

正しい解決策をご案内します。カスタム クラスを定義します。匿名クラスは使用しないでください。

class MyClass
{
    public string FName { get; set; }
    public string BabatMah { get; set; }

    public int x { get; set; }
    public int y { get; set; }

    public int z { get { return x - y; }    }

    public int karkard { get; set; }

    // implement Equals and GetHashCode for correct behaviour of Distinct
}

そして、計算値を選択せずz​​に選択するだけですMyClass

select new MyClass
    { 
        FName = c.Karmand.FName,
        BabatMah = c.BabatMah,
        ...

計算を解決(c.Karmand.ExitTime-c.Karmand.EnterTime).Hours *30するには、ORM に関する詳細を提示する必要があります。解決策は異なります。1つの一般的な解決策は、計算したのと同じ方法で、時間の差を抽出ExitTimeEnterTimeMyClassから計算することですx - y

于 2013-03-21T12:56:38.390 に答える
0

クエリでキーワードを使用しletます。

var query =
(from c in DB.SabtHoghoghs
join aa in DB.SabtHesabKarmands on c.KarmandID equals aa.KarmandID
let x = DB.SabtHesabKarmands.Where(q => q.BabatMah.Year == c.BabatMah.Year &&
        q.BabatMah.Month == c.BabatMah.Month && q.HesabKarmand.HesabKarmandTypeID == 1)
        .Sum(aaa => aaa.Tedad * aaa.HesabKarmand.Mablagh)
let y = DB.SabtHesabKarmands.Where(q => q.BabatMah.Year == c.BabatMah.Year &&
        q.BabatMah.Month == c.BabatMah.Month && q.HesabKarmand.HesabKarmandTypeID == 2)
        .Sum(aaa => aaa.Tedad * aaa.HesabKarmand.Mablagh)
select new
{
    c.Karmand.FName,
    c.BabatMah,

    X = x,
    Y = y,

    Z = y - x,   //how to do this(1)

    karkard = (c.Karmand.ExitTime - c.Karmand.EnterTime).Hours * 30  //how to do this(2)

}).Distinct();
于 2013-03-21T13:04:20.663 に答える