Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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#_Linq_Silverlight - Fatal编程技术网

C# 无法在一个变量中组合两个linq结果

C# 无法在一个变量中组合两个linq结果,c#,linq,silverlight,C#,Linq,Silverlight,我有两个linq结果,我想将它们合并到一个变量中。我如何实现这一点 var xAxisconceptIdsAndName = _analysisResult.Select(x => new { x.ConceptId1, x.ConceptDisplay1 }).Distinct(); var yAxisconceptIdsAndName = _analysisResult.Select(x => new { x.ConceptId2, x.ConceptDisplay2 }).

我有两个linq结果,我想将它们合并到一个变量中。我如何实现这一点

 var xAxisconceptIdsAndName = _analysisResult.Select(x => new { x.ConceptId1, x.ConceptDisplay1 }).Distinct();
 var yAxisconceptIdsAndName = _analysisResult.Select(x => new { x.ConceptId2, x.ConceptDisplay2 }).Distinct();
XaxiConceptIDsAndName返回(1,“a”),而yAxisconceptIdsAndName返回(2,“b”)。我希望它们出现在一个结果中,比如(1,“a”),(2,“b”),等等

结果:

方法-1:

var conceptIdsAndName = Enumerable.Union(xAxisconceptIdsAndName, yAxisconceptIdsAndName);
错误:

 The type arguments for method 'System.Linq.Enumerable.Union<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
 'System.Collections.Generic.IEnumerable<AnonymousType#1>' does not contain a definition for 'Union' and the best extension method overload 'System.Linq.Queryable.Union<TSource>(System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' has some invalid arguments

 Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Linq.IQueryable<AnonymousType#2>'
错误:

 The type arguments for method 'System.Linq.Enumerable.Union<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
 'System.Collections.Generic.IEnumerable<AnonymousType#1>' does not contain a definition for 'Union' and the best extension method overload 'System.Linq.Queryable.Union<TSource>(System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)' has some invalid arguments

 Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Linq.IQueryable<AnonymousType#2>'
“System.Collections.Generic.IEnumerable”不包含“Union”的定义和最佳扩展方法重载“System.Linq.Queryable.Union(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)”具有一些无效参数
实例参数:无法从“System.Collections.Generic.IEnumerable”转换为“System.Linq.IQueryable”

有什么建议吗?

您需要在select语句中使用非匿名类型,这将导致类型在您的
Union
调用中匹配

创建用于保存结果的类型,并将其用于X轴和Y轴数据

例如,假设:

 class AxisData : IEquatable<AxisData>
 {
     public int Id { get; set; }
     public string Display { get; set; } // Should be the type of ConceptDisplay1 & 2

     // Implement IEquatable<AxisData>
 }

然后您的
联合
调用将正常工作。

您可以使用
元组
而不是
匿名类型

var xAxisconceptIdsAndName = _analysisResult.Select(x => 
    new Tuple<int,string> (x.ConceptId1, x.ConceptDisplay1)).Distinct();
var yAxisconceptIdsAndName = _analysisResult.Select(x => 
    new Tuple<int,string> (x.ConceptId2, x.ConceptDisplay2)).Distinct();

var union = xAxisconceptIdsAndName.Union(yAxisconceptIdsAndName);
var xAxisconceptIdsAndName=\u分析结果。选择(x=>
新元组(x.ConceptId1,x.ConceptDisplay1)).Distinct();
var yAxisconceptIdsAndName=\u analysisResult.Select(x=>
新元组(x.ConceptId2,x.ConceptDisplay2)).Distinct();
var union=xAxisconceptIdsAndName.union(yAxisconceptIdsAndName);

编译器认为
匿名类型
不同,因此不能在
联合
语句中使用

您的匿名类型具有不同的属性,因此是不同的类型。如果使属性在名称、类型和顺序上相同,则将使用相同的类型,从而允许您将它们组合到该匿名类型的单个序列中

var xAxisconceptIdsAndName = _analysisResult.Select(x => new 
    { 
        ConceptId = x.ConceptId1, 
        ConceptDisplay = x.ConceptDisplay1 
    }).Distinct();
var yAxisconceptIdsAndName = _analysisResult.Select(x => new 
    { 
        ConceptId = x.ConceptId2, 
        ConceptDisplay = x.ConceptDisplay2 
    }).Distinct();
var combined = xAxisconceptIdsAndName.Concat(yAxisconceptIdsAndName);

\u analysisResult
的类型是什么?这是一个可观察的集合。我想您正在寻找
Concat
方法
var-conceptIdsAndName=xaxiscoptidsandname.Concat(yaxiscoptidsandname)