Need to cast explicitly thru anonymous type in Union()
我有两个var/对象,通过这两个函数检索:
1 2 3 4 | private IQueryable<Project> SelectAll_1(...) { return query; } |
类项目是:
1 2 3 4 | private int ID; private string col1; private string col2; private string col3; |
另一个:
1 2 3 4 | private IQueryable<Project_test> SelectAll_2(...) { return query; } |
其中poco of是:
1 2 3 4 | private string ID_inString; private string col1; private string col2; private string col3; |
我需要对他们两个执行联合,
1 2 3 4 | var P2 = SelectAll_2(...); var P1 = SelectAll_1(...); var P3 = P2.Union(P1); |
但我得到了一个错误,提到:
The type arguments for method 'System.Linq.Queryable.Union(System.Linq.IQueryable, System.Linq.Expressions.Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
我看到一些人通过匿名类型来解决这个问题,但我不知道它是如何工作的。有人知道吗?
你不能合并两种不同的类型,除非其中一种继承自另一种(例如,你可能会找到
现在在您的例子中,如果不同的属性具有相同的含义,那么听起来
您可以为此使用匿名类型,方法如下:
1 2 3 4 |
或者您可以只使用现有类型之一:
1 2 3 4 5 6 | 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); |
这并不是很明显哪一个是更好的主意,但如果可能的话,我会继续尝试调和这两种类型,在这一点上,你没有任何问题。
问题是,
你需要做的是用一个