C# 无法在一个变量中组合两个linq结果
我有两个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 }).
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)我也试过了。它给出了与我在方法2中得到的相同的错误。在使用类似于下面的than对象初始值设定项时,需要指定属性名称。