如何将多个linq查询组合成一个结果集?我有一个多选复选框。根据检查的是哪一个,我想将结果合并到一个查询中。类似的东西://显然不起作用//因为query1和query2未在此范围内定义。知道如何有选择地组合这些吗?假设查询类型相同,您可以在条件语句之外定义查询。首先,创建一个与参数类型相同的空枚举的辅助方法:staticIEnumerableCreateEmptyEnumerable(IEnumerabletemplateQuery){然后,新代码:varquery1=fromtintable1...varquery2=fromtintable2...varfinalQuery=CreateEmptyEnumerable(query1);如果(Checkbox1.Checked){finalQuery=query1;}if(Checkbox2.Checked){finalQuery=finalQuery.Union(query2);}DataGridView1.DataSource=finalQuery.ToList();//避免重新枚举是好的,因为查询不会在枚举之前实际执行,例如调用ToList()。如果您不使用var但知道类型,则可以在未选中复选框的情况下通过Enumerable.Empty初始化query1和query2。我只是在控制台应用程序中尝试了这个,因为我很好奇并且它只是工作......classProgram{privateclassData1{publicintCode1{get;放;}publicstringValue1{get;放;}}privateclassData2{publicintCode2{get;放;}publicstringValue2{get;放;}}staticvoidMain(string[]args){vardata1=new[]{newData1{Code1=1,Value1="one"},newData1{Code1=2,Value1="two"},newData1{Code1=3,Value1="三"}};vardata2=new[]{newData2{Code2=101,Value2="aaa"},newData2{Code2=102,Value2="bbb"},newData2{Code2=103,Value2="ccc"}};varquery1=fromd1indata1selectnew{code=d1.Code1,text=d1.Value1};varquery2=fromd2indata2selectnew{code=d2.Code2,text=d2.Value2};vardatasource=query1.Union(query2);foreach(vardindatasource){Console.WriteLine(d);但是,如果我将匿名类型中的字段名称更改为不同的名称,则会出现编译器错误,因此看起来关键是在匿名类型中使用相同的名称。或者只是将结果定义为一个已定义的类型:)使用Rx你可以这样做:以上是C#学习教程:如何将多个linq查询合并为一个结果集?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicpartialclass_Default:System.Web.UI.Page{IEnumerabletable1;IEnumerable表2;protectedvoidPage_Load(objectsender,EventArgse){table1=Enumerable.Range(0,10);table2=Enumerable.Range(10,10);}protectedvoidButton1_Click(objectsender,EventArgse){varquery=Observable.If(()=>CheckBox1.Checked,(fromtintable1selectt).ToObservable(),Observable.Empty()).Concat(Observable.If(()=>CheckBox2.Checked,(fromtintable2selectt).ToObservable(),Observable.Empty()));query.Subscribe(i=>Response.Write(i));}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
