C# 使用LINQ的字段和

C# 使用LINQ的字段和,c#,linq,sql-server-ce,C#,Linq,Sql Server Ce,在问我的问题之前先了解一下背景 我使用sql compact,我有两个表, 第一个表(IssueEmp) 第二张表(RecEmp) 我使用linq在RecEmp和IssueEmp之间执行连接 var res = from t1 in receice.Tables[0].AsEnumerable() join t2 in issue.Tables[0].AsEnumerable()

在问我的问题之前先了解一下背景

我使用sql compact,我有两个表, 第一个表(IssueEmp)

第二张表(RecEmp)

我使用linq在RecEmp和IssueEmp之间执行连接

var res = from t1 in receice.Tables[0].AsEnumerable()

                      join t2 in issue.Tables[0].AsEnumerable()                                            
                         on new 
                         {
                             CNo = t1.Field<int>("CNo"),
                             Empid = t1.Field<int>("EmpID") 
                         } 
                         equals new 
                         {
                             CNo = t2.Field<int>("CNo"),
                             Empid = t2.Field<int>("EmpID") 
                         }                     
                      select new
                       {
                           SNo = t1.Field<int>("SNo"),
                           ChNo = t1.Field<int>("CNo"),
                           EmpID = t1.Field<int>("EmpID"),
                           DateIssued = t2.Field<DateTime>("Date"),                                                                               
                           RMIssued = t2.Field<string>("RMCode"),
                           QuantityIssued = t2.Field<double>("Quantity"),

                           DateReceived = t1.Field<DateTime>("Date"),
                           RMCodeReceived = t1.Field<string>("RMCode"),
                           QuantityReceived = t1.Field<double>("Quantity")

                       };
var res=from t1 in receice.Tables[0].AsEnumerable()
在issue.Tables[0]中加入t2。AsEnumerable()
在纽约
{
CNo=t1.字段(“CNo”),
Empid=t1.字段(“Empid”)
} 
等于新的
{
CNo=t2.字段(“CNo”),
Empid=t2.字段(“Empid”)
}                     
选择新的
{
SNo=t1.字段(“SNo”),
ChNo=t1.字段(“CNo”),
EmpID=t1.字段(“EmpID”),
发布日期=t2.字段(“日期”),
RMIssued=t2.字段(“RMCode”),
已发行数量=t2.字段(“数量”),
DateReceived=t1.字段(“日期”),
RMCodeReceived=t1.字段(“RMCode”),
QuantityReceived=t1.字段(“数量”)
};
我从上面的linq查询中得到的输出是

但我不知道如何得到发出数量之和,同样是收到数量之和,最后是两个数量之和之间的差异。要求如下

注意:

var query = from d in data
           group d by new { d.DateIssued, d.EmpId, d.ChNo, d.DateReceived }
           into x
           select new {
                Date = x.Key.DateIssued,
                CNo = x.Key.ChNo,
                EmpId=x.Key.EmpId,
                CRi = x.Where(c=>c.RMIssued == "CR").Sum(c=>c.QuantityIssued),
                SJi = x.Where(c=>c.RMIssued == "SJ").Sum(c=>c.QuantityIssued),
                TTi = x.Where(c=>c.RMIssued == "TT").Sum(c=>c.QuantityIssued),
                WRi = x.Where(c=>c.RMIssued == "WR").Sum(c=>c.QuantityIssued),
                TotalIssued = x.Sum(c => c.QuantityIssued),

                DateReceived = x.Key.DateReceived,
                CRr = x.Where(c=>c.RMCodeReceived == "CR").Sum(c=>c.QuantityReceived),
                SJr = x.Where(c=>c.RMCodeReceived == "SJ").Sum(c=>c.QuantityReceived),
                TTr = x.Where(c=>c.RMCodeReceived == "TT").Sum(c=>c.QuantityReceived),
                WRr = x.Where(c=>c.RMCodeReceived == "WR").Sum(c=>c.QuantityReceived),
                TotalReceived = x.Sum(c => c.QuantityReceived),

                Diff = x.Sum(c => c.QuantityIssued) - x.Sum(c => c.QuantityReceived)
            };
我有点懒,所以我没有用你提供的所有唱片,只有前四张

预期结果:

var query = from d in data
           group d by new { d.DateIssued, d.EmpId, d.ChNo, d.DateReceived }
           into x
           select new {
                Date = x.Key.DateIssued,
                CNo = x.Key.ChNo,
                EmpId=x.Key.EmpId,
                CRi = x.Where(c=>c.RMIssued == "CR").Sum(c=>c.QuantityIssued),
                SJi = x.Where(c=>c.RMIssued == "SJ").Sum(c=>c.QuantityIssued),
                TTi = x.Where(c=>c.RMIssued == "TT").Sum(c=>c.QuantityIssued),
                WRi = x.Where(c=>c.RMIssued == "WR").Sum(c=>c.QuantityIssued),
                TotalIssued = x.Sum(c => c.QuantityIssued),

                DateReceived = x.Key.DateReceived,
                CRr = x.Where(c=>c.RMCodeReceived == "CR").Sum(c=>c.QuantityReceived),
                SJr = x.Where(c=>c.RMCodeReceived == "SJ").Sum(c=>c.QuantityReceived),
                TTr = x.Where(c=>c.RMCodeReceived == "TT").Sum(c=>c.QuantityReceived),
                WRr = x.Where(c=>c.RMCodeReceived == "WR").Sum(c=>c.QuantityReceived),
                TotalReceived = x.Sum(c => c.QuantityReceived),

                Diff = x.Sum(c => c.QuantityIssued) - x.Sum(c => c.QuantityReceived)
            };
这就是我得到的:

Linq查询:

var query = from d in data
           group d by new { d.DateIssued, d.EmpId, d.ChNo, d.DateReceived }
           into x
           select new {
                Date = x.Key.DateIssued,
                CNo = x.Key.ChNo,
                EmpId=x.Key.EmpId,
                CRi = x.Where(c=>c.RMIssued == "CR").Sum(c=>c.QuantityIssued),
                SJi = x.Where(c=>c.RMIssued == "SJ").Sum(c=>c.QuantityIssued),
                TTi = x.Where(c=>c.RMIssued == "TT").Sum(c=>c.QuantityIssued),
                WRi = x.Where(c=>c.RMIssued == "WR").Sum(c=>c.QuantityIssued),
                TotalIssued = x.Sum(c => c.QuantityIssued),

                DateReceived = x.Key.DateReceived,
                CRr = x.Where(c=>c.RMCodeReceived == "CR").Sum(c=>c.QuantityReceived),
                SJr = x.Where(c=>c.RMCodeReceived == "SJ").Sum(c=>c.QuantityReceived),
                TTr = x.Where(c=>c.RMCodeReceived == "TT").Sum(c=>c.QuantityReceived),
                WRr = x.Where(c=>c.RMCodeReceived == "WR").Sum(c=>c.QuantityReceived),
                TotalReceived = x.Sum(c => c.QuantityReceived),

                Diff = x.Sum(c => c.QuantityIssued) - x.Sum(c => c.QuantityReceived)
            };
使用的数据:

var query = from d in data
           group d by new { d.DateIssued, d.EmpId, d.ChNo, d.DateReceived }
           into x
           select new {
                Date = x.Key.DateIssued,
                CNo = x.Key.ChNo,
                EmpId=x.Key.EmpId,
                CRi = x.Where(c=>c.RMIssued == "CR").Sum(c=>c.QuantityIssued),
                SJi = x.Where(c=>c.RMIssued == "SJ").Sum(c=>c.QuantityIssued),
                TTi = x.Where(c=>c.RMIssued == "TT").Sum(c=>c.QuantityIssued),
                WRi = x.Where(c=>c.RMIssued == "WR").Sum(c=>c.QuantityIssued),
                TotalIssued = x.Sum(c => c.QuantityIssued),

                DateReceived = x.Key.DateReceived,
                CRr = x.Where(c=>c.RMCodeReceived == "CR").Sum(c=>c.QuantityReceived),
                SJr = x.Where(c=>c.RMCodeReceived == "SJ").Sum(c=>c.QuantityReceived),
                TTr = x.Where(c=>c.RMCodeReceived == "TT").Sum(c=>c.QuantityReceived),
                WRr = x.Where(c=>c.RMCodeReceived == "WR").Sum(c=>c.QuantityReceived),
                TotalReceived = x.Sum(c => c.QuantityReceived),

                Diff = x.Sum(c => c.QuantityIssued) - x.Sum(c => c.QuantityReceived)
            };
这是我用来测试它的一组数据:

var data= new []{
    new { SNo= 9,  ChNo=5,  EmpId=81, DateIssued=dateIssued, RMIssued="SJ", QuantityIssued=30,   DateReceived=dateReceived, RMCodeReceived="SJ", QuantityReceived=20.3},
    new { SNo= 10, ChNo=5,  EmpId=81, DateIssued=dateIssued, RMIssued="SJ", QuantityIssued=30,   DateReceived=dateReceived, RMCodeReceived="CR", QuantityReceived=9.6},
    new { SNo= 11, ChNo=28, EmpId=82, DateIssued=dateIssued, RMIssued="TT", QuantityIssued=30.5, DateReceived=dateReceived, RMCodeReceived="TT", QuantityReceived=29},
    new { SNo= 12, ChNo=28, EmpId=82, DateIssued=dateIssued, RMIssued="WR", QuantityIssued=10,   DateReceived=dateReceived, RMCodeReceived="TT", QuantityReceived=29}
};
我建议你用它来测试


祝你好运

请参阅@A.V当可以使用linq完成数据集连接帮助器类时,我为什么要使用数据集连接帮助器类。。。