我有 2 个 var/objects,通过这两个函数检索:
private IQueryable<Project> SelectAll_1(...)
{
return query;
}
类项目是:
private int ID;
private string col1;
private string col2;
private string col3;
另一个:
private IQueryable<Project_test> SelectAll_2(...)
{
return query;
}
其中 POCO 是:
private string ID_inString;
private string col1;
private string col2;
private string col3;
我需要对他们两个进行联合,
var P2 = SelectAll_2(...);
var P1 = SelectAll_1(...);
var P3 = P2.Union(P1);
但我收到一个错误,提到:
无法从用法中推断出方法“System.Linq.Queryable.Union(System.Linq.IQueryable, System.Linq.Expressions.Expression>)”的类型参数。尝试显式指定类型参数。
我看到有些人通过匿名类型解决了这个问题,但我不确定它是如何工作的。有人有什么想法吗?
您不能联合两种不同的类型,除非一种类型继承另一种类型(例如,您could可能会找到一个并集IEnumerable<object>
and IEnumerable<string>
,尽管这很少有用)。
现在就你的情况来说,听起来像Project
and Project_test
如果各个属性具有相同的含义,则实际上应该是一种类型。目前,ID 属性有不同的类型 - 但这真的有必要或可取吗?如果它们都是具有相同范围的标识符,则将它们存储在相同的表示形式中是有意义的。如果属性don't具有相同的含义,您根本不应该在它们之间形成联盟。如果他们do具有相同的含义,您应该尝试使两个序列使用相同的类型。
You could为此使用匿名类型,如下所示:
var projectedP1 = P1.Select(x => new { x.ID, x.col1, x.col2, x.col3 });
var projectedP2 = P2.Select(x => new { ID = int.Parse(x.ID_inString),
x.col1, x.col2, x.col3 });
var union = projectedP1.Union(projectedP2);
或者您可以只使用现有类型之一:
var projectedP1 = P1.Select(x => new Project_test {
ID_inString = x.ID.ToString(),
col1 = x.col1,
col2 = x.col2,
col3 = x.col3 });
var union = projectedP1.Union(P2);
这并不是很明显哪个是更好的主意 - 但我会回到trying如果可能的话,协调这两种类型,此时无论如何你都没有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)