来一个LINQ难题,看看有没有大神可以解决

造物主在胃中 2016-09-19 03:45:46
最近在看linq,发现例题有一个情况无法实现

int[] intAry1 = { 5, 15, 23, 30, 33, 40 };
int[] intAry2 = { 10, 20, 30, 40, 50, 60, 70, 80 };
var query1 =
from val1 in intAry1
join val2 in intAry2 on /* val2%val1==0*/ into grps
from grp in grps.DefaultIfEmpty()
select new { val1, grp };

期望是intAry1 左联接所有他能整除的intAry2 中的值,筛选出val1 , val2
本来以为以上代码可以实现,结果在join的时候into之前注释掉的表达式不符合约束
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
造物主在胃中 2016-09-19
  • 打赏
  • 举报
回复
实在不好意思,想点无满意结贴结果发现结了之后没有分给你们
造物主在胃中 2016-09-19
  • 打赏
  • 举报
回复
引用 5 楼 hanjun0612 的回复:
好吧,如果你一定要强求。。。我只能教你必杀技了。。
int[] intAry1 = { 5, 15, 23, 30, 33, 40 };
            int[] intAry2 = { 10, 20, 30, 40, 50, 60, 70, 80 };
            var query1 =
                from val1 in intAry1
                join val2 in intAry2 on   0 equals 0 into grps
                from grp in grps.DefaultIfEmpty()
                where grp % val1 == 0
                select new { val1, grp };

            foreach (var item in query1)
            {
                Console.WriteLine(item.val1 + "--" + item.grp);
            }
其实我还是想说,左联是建立在2个表类型的数据存在关系的基础上的。而你只是2个简单的Int数组,其实他们根本没有左联的关系。而这里说的整除关系,只能作为条件。就像2楼说的,linq的左联关系比较苛刻。所以equals不行。
谢谢,确实这没有实际的应用场景,只是我觉得对比起T_SQL来说确实局限性太大了,还有你的那个方法我试过,还是内连接啊
正怒月神 2016-09-19
  • 打赏
  • 举报
回复
好吧,如果你一定要强求。。。我只能教你必杀技了。。
int[] intAry1 = { 5, 15, 23, 30, 33, 40 };
            int[] intAry2 = { 10, 20, 30, 40, 50, 60, 70, 80 };
            var query1 =
                from val1 in intAry1
                join val2 in intAry2 on   0 equals 0 into grps
                from grp in grps.DefaultIfEmpty()
                where grp % val1 == 0
                select new { val1, grp };

            foreach (var item in query1)
            {
                Console.WriteLine(item.val1 + "--" + item.grp);
            }
其实我还是想说,左联是建立在2个表类型的数据存在关系的基础上的。而你只是2个简单的Int数组,其实他们根本没有左联的关系。而这里说的整除关系,只能作为条件。就像2楼说的,linq的左联关系比较苛刻。所以equals不行。
造物主在胃中 2016-09-19
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
linq的join不像数据库那样,限制比较死,只能是比较值
换句话说不能使用等式来标示连接关系的join就只能内连接了哦
造物主在胃中 2016-09-19
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
这个和左联没有关系
int[] intAry1 = { 5, 15, 23, 30, 33, 40 };
            int[] intAry2 = { 10, 20, 30, 40, 50, 60, 70, 80 };
            var query1 =
                from val1 in intAry1
                from val2 in intAry2 
                where val2%val1==0 
                select new { val1,val2 };

            foreach (var item in query1)
            {
                Console.WriteLine(item.val1+"--"+item.val2);
            }

            Console.ReadLine();
不要左联我自己也会呢,就是要左联的话,就做不出来了
  • 打赏
  • 举报
回复
linq的join不像数据库那样,限制比较死,只能是比较值
正怒月神 2016-09-19
  • 打赏
  • 举报
回复
这个和左联没有关系
int[] intAry1 = { 5, 15, 23, 30, 33, 40 };
            int[] intAry2 = { 10, 20, 30, 40, 50, 60, 70, 80 };
            var query1 =
                from val1 in intAry1
                from val2 in intAry2 
                where val2%val1==0 
                select new { val1,val2 };

            foreach (var item in query1)
            {
                Console.WriteLine(item.val1+"--"+item.val2);
            }

            Console.ReadLine();

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧