Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# LINQ查询以显示两个表的结果_C#_.net_Linq_Linq To Sql_Linq Query Syntax - Fatal编程技术网

C# LINQ查询以显示两个表的结果

C# LINQ查询以显示两个表的结果,c#,.net,linq,linq-to-sql,linq-query-syntax,C#,.net,Linq,Linq To Sql,Linq Query Syntax,这是我的两张桌子 购买股票 SoldShare 我想从LINQ查询得到的结果表是 此结果表包含公司名称和总买卖股份 到目前为止,我的代码是: var userHistoryAll = from buy in db.share_bought_history join sold in db.share_sold_history on buy.regist_id equals sold.regist_id

这是我的两张桌子

购买股票

SoldShare

我想从LINQ查询得到的结果表是

此结果表包含公司名称和总买卖股份

到目前为止,我的代码是:

var userHistoryAll = from buy in db.share_bought_history
                     join sold in db.share_sold_history
                     on buy.regist_id equals sold.regist_id
                     select new
                             {
                                 buy,
                                 sold
                             } into combine
                     group combine by combine.buy.comapnay_id
                     into final
                     select new
                             {
                                 cName = final.FirstOrDefault().buy.company.company_name,
                                 uBuy = final.Sum(x => x.buy.no_of_sahre),
                                 uSold = final.Sum(x => x.sold.no_of_sahre)
                             };
但我无法得到想要的结果。

请尝试以下操作:

var userHistoryAll = (from buy in db.share_bought_history
                                 join sold in db.share_sold_history
                                 on buy.comapnay_id equals sold.comapnay_id
                                 select new { buy = buy, sold = sold})
                                 .GroupBy(x => x.buy.comapnay_id)
                                 .Select(x => new {
                                     cName=x.Key,
                                     uBuy = x.Select(y => y.buy.no_of_sahre).Sum(),
                                     uSold = final.Select(y => y.sold.no_of_sahre).Sum()
                                 }).ToList(); 
请尝试以下操作:

var userHistoryAll = (from buy in db.share_bought_history
                                 join sold in db.share_sold_history
                                 on buy.comapnay_id equals sold.comapnay_id
                                 select new { buy = buy, sold = sold})
                                 .GroupBy(x => x.buy.comapnay_id)
                                 .Select(x => new {
                                     cName=x.Key,
                                     uBuy = x.Select(y => y.buy.no_of_sahre).Sum(),
                                     uSold = final.Select(y => y.sold.no_of_sahre).Sum()
                                 }).ToList(); 

问题是,您的数据没有唯一的键可以加入(至少我是这样认为的)

因此,首先在连接之前进行连接

我个人预先提供lambda语法,但您可以对其进行转换

var buyGroub = BuyShare.GroubBy(x=>x.Id)
                       .Select(x=> new 
                       {
                          name = x.Name,
                          buy = x.Sum(s => s.Share)
                       }

var soldGroub = SoldShare.GroubBy(x=>x.Id)
                       .Select(x=> new 
                       {
                          name = x.Name,
                          sold = x.Sum(s => s.Share)
                       }
现在你可以随心所欲地展示

var result = buyGroub.Join(soldGroub,
                          a=>a.name,
                          b=>b.name,
                          (a,b)=>new {a.Name , a.buy , b.sold});
编辑


要获取列表1中的记录而不是列表2中的记录,以及其他方法,您需要执行一个名为..的操作。。检查已接受的答案它有两个数组,相当于您的两个列表。问题是您的数据没有唯一的键可以连接(至少我是这么认为的)

因此,首先在连接之前进行连接

我个人预先提供lambda语法,但您可以对其进行转换

var buyGroub = BuyShare.GroubBy(x=>x.Id)
                       .Select(x=> new 
                       {
                          name = x.Name,
                          buy = x.Sum(s => s.Share)
                       }

var soldGroub = SoldShare.GroubBy(x=>x.Id)
                       .Select(x=> new 
                       {
                          name = x.Name,
                          sold = x.Sum(s => s.Share)
                       }
现在你可以随心所欲地展示

var result = buyGroub.Join(soldGroub,
                          a=>a.name,
                          b=>b.name,
                          (a,b)=>new {a.Name , a.buy , b.sold});
编辑


要获取列表1中的记录而不是列表2中的记录,以及其他方法,您需要执行一个名为..的操作。。检查接受的答案它有两个数组,相当于你的两个列表

你不必做
x.Select(y=>y.buy.no\u of_sahre.Sum(),
x.Sum(y=>y.buy.no\u of_sahre)
你的意思是
uSold=x.Select(…
你不必做
x.Select(y=>y.buy.no_of_sahre).Sum()
,你可以通过这个
uSold=final.Select(…
你的意思是
uSold=x.Select吗(…
?@Vikhram我搜索了一点,但没有结果可以在非唯一上加入?现在唯一的问题是它没有显示buy表中的所有条目。场景是buy表包含4家公司的股票,但用户只出售了3家公司的股票。这意味着第4家公司不在Seld表中。现在,此查询的结果仅显示3 c公司,我希望第四家公司的销售额为0的所有4家公司。一个更简单的解决方案是,在执行联接代码之前..循环第一个列表并检查第二个列表中是否有相应的记录,如果没有,则添加一个具有相同id和数量0的记录..另一种方法是循环..谢谢,但我尝试了这个方法,它可以工作。
var result=从buyGroub中的a将a.name=b.name上的soldGroub中的b连接到temp.DefaultIfEmpty()中的c中的temp,选择new{cName=a.name,uBuy=a.buy,uSold=c!=null?c.sell:0}
很高兴提供帮助,如果此答案解决了您的问题,请单击答案旁边的复选标记将其标记为已接受。这是为了节省其他用户试图解决您的问题的时间,请参见:@Vikhram我搜索了一点,但没有结果是否可以加入非唯一?现在唯一的问题是它没有显示m buy table。该场景是buy table包含4家公司的股份,但用户只出售了3家公司的股份。这意味着第4家公司不在Seld table中。现在查询结果显示只有3家公司,我希望第4家公司的Seld值为0的所有4家公司。一个更简单的解决方案是,在执行联接代码之前..循环第一个列表,然后c检查第二个是否有对应的记录,如果没有,则添加一个id和数量相同的记录。另一个方法是在周围添加一个记录…谢谢,但我尝试了这个方法,它可以工作。
var result=from a in buyGroub join b in soldGroub on a.name=b.name in temp.DefaultIfEmpty()中的c in temp选择new{cName=a.name,uBuy=a.buy,uSold=c!=null?c.sell:0};
很乐意帮助,如果此答案解决了您的问题,请单击答案旁边的复选标记将其标记为已接受。这是为了节省其他用户尝试解决您的问题的时间,请参阅: