C# 多个表上的Linq到SQL查询(AsEnumerable)
下面是一个Linq到SQL查询,它只使用我的SQL Server数据库中的一个表,并且工作得非常好:C# 多个表上的Linq到SQL查询(AsEnumerable),c#,linq-to-sql,C#,Linq To Sql,下面是一个Linq到SQL查询,它只使用我的SQL Server数据库中的一个表,并且工作得非常好: private void GetData() { DateTime d = DateTime.Now; using (DataClasses1DataContext dc = new DataClasses1DataContext()) { var qte = dc.ENTREES_STOCKS.AsEnumerable()
private void GetData()
{
DateTime d = DateTime.Now;
using (DataClasses1DataContext dc = new DataClasses1DataContext())
{
var qte = dc.ENTREES_STOCKS.AsEnumerable()
.Where(x => x.ENTSTK_LOT == lot)
.Where(x => x.ART_CODE == artCode)
.Where(x => x.ENTSTK_USER == null)
.Select(s => new
{
art = s.ART_CODE,
date = s.ENTSTK_DTENTREE,
numLot = s.ENTSTK_LOT,
pnet = s.ENTSTK_PNET,
nbu = s.ENTSTK_NBU
})
.GroupBy(g => new { g.art, g.date, g.numLot })
.Select(n => new
{
n.Key.art,
n.Key.date,
n.Key.numLot,
pnet = n.Sum(x => Math.Round(Convert.ToDecimal(x.pnet), 2)),
nbu = n.Sum(x => Math.Round(Convert.ToDecimal(x.nbu), 2)),
});
QEntreeTB.Text = qte.First().pnet.ToString();
NbuEntreeTB.Text = qte.First().nbu.ToString();
}
}
如何修改此代码以将其他表连接到此查询,如:
private void GetData()
{
DateTime d = DateTime.Now;
using (DataClasses1DataContext dc = new DataClasses1DataContext())
{
var qte = dc.ENTREES_STOCKS.AsEnumerable()
// Thoseline of codes of course doesn't work
join art in dc.FICHES_ARTICLES on ENTREES_STOCKS.ART_CODE equals art.ART_CODE
join ent in dc.STK_ENT on art.ART_CODE equals ent.ART_CODE
....
//
.Where(x => x.ENTSTK_LOT == lot)
.Where(x => x.ART_CODE == artCode)
.Where(x => x.ENTSTK_USER == null)
.Select(s =>
new
{
art = s.ART_CODE,
date = s.ENTSTK_DTENTREE,
numLot = s.ENTSTK_LOT,
pnet = s.ENTSTK_PNET,
nbu = s.ENTSTK_NBU
}
)
.GroupBy(g => new { g.art, g.date, g.numLot })
.Select(n =>
new
{
n.Key.art,
n.Key.date,
n.Key.numLot,
pnet = n.Sum(x => Math.Round(Convert.ToDecimal(x.pnet), 2)),
nbu = n.Sum(x => Math.Round(Convert.ToDecimal(x.nbu), 2)),
}
);
QEntreeTB.Text = qte.First().pnet.ToString();
NbuEntreeTB.Text = qte.First().nbu.ToString();
}
}
或者有没有另一种方法来编码这个查询??
因为事实上我只想连接多个表,按一些字段分组,和其他字段求和。首先,调用一个numerable有点多余。然后您可以简单地使用Join扩展方法
var qte = dc.ENTREES_STOCKS
.JOIN(dc.FICHES_ARTICLES,art=>art.ART_CODE, stock => stock.ART_CODE)
.JOIN(dc.STK_ENT,ent => ent.ART_CODE,stock => stock.ART_CODE)
.Where(x => x.ENTSTK_LOT == lot)
.Where(x => x.ART_CODE == artCode)
.Where(x => x.ENTSTK_USER == null)
....
您可以在此处找到更多答案:
首先,调用numerable有点多余。然后您可以简单地使用Join扩展方法
var qte = dc.ENTREES_STOCKS
.JOIN(dc.FICHES_ARTICLES,art=>art.ART_CODE, stock => stock.ART_CODE)
.JOIN(dc.STK_ENT,ent => ent.ART_CODE,stock => stock.ART_CODE)
.Where(x => x.ENTSTK_LOT == lot)
.Where(x => x.ART_CODE == artCode)
.Where(x => x.ENTSTK_USER == null)
....
您可以在此处找到更多答案:
“数据”在英语中已经是单数和复数形式-没有“数据”作为复数形式。“数据”在英语中已经是单数和复数形式-没有“数据”作为复数形式。谢谢你的回答,但当我写第一个时。加入…“我设置了一个错误:“JOIN方法的重载不接受3个参数您有正确的using语句吗?”?检查我答案中的链接。在顶部,它给出了所有的using语句。谢谢,但如果我没有犯错误,这些程序集是用于Entity FrameWork的,不是用于LinqToSql的。谢谢你的回答,但当我编写第一个“.JOIN…”时,我正在设置错误:“JOIN方法的重载不接受3个参数您有正确的using语句吗?”?检查我答案中的链接。在顶部,它给出了所有的using语句。谢谢,但如果我没有弄错的话,这些程序集是用于实体框架的,而不是用于LinqToSql