来一个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之前注释掉的表达式不符合约束
...全文
221 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();
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。

8,492

社区成员

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

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