Nol*_*esh 0 c# linq casting type-conversion
我有一个var名为retVal的变量,它等于某个查询.在一些条件之后,我想将它等同于另一个查询.但是我得到了一个错误implicit cast of type "System.Collections.Generic.IEnumerable<AnonymousType#1>" in "System.Collections.Generic.IEnumerable<AnonymousType#2>" is impossible.你可以问我为什么我不想定义另一个var变量.因为这个用于foreach循环.我们来看看代码:
var retVal = from groupItem in result.AsEnumerable()
where groupItem.Sms.First().amountOfParts == (
(from item in rawSmsList.AsEnumerable()
where item.referenceNumber == groupItem.Sms.First().referenceNumber
select item).Count()
)
select new
{
Value = groupItem.Value,
Sms = groupItem.Sms
};
//CONDITION
if (retVal.ToArray().Length==0)
{
//HERE I NEED TO RETVAL EQUATE NEW QUERY
retVal = from groupItem in result.AsEnumerable()
where groupItem.Sms.First().amountOfParts == (
(from item in rawSmsList.AsEnumerable()
where item.senderNumber == groupItem.Sms.First().senderNumber
select item).Count()
)
select new
{
Value = groupItem.Value,
Sms = groupItem.Sms
};
}
foreach (var item in retVal)//FOREACH EXPECTS THE SAME RETVAL!!!
Run Code Online (Sandbox Code Playgroud)
那么如何将不同的查询转换为同一个var变量呢?或者如何找到var变量类型然后将其转换为新定义的变量?
var 表示隐式类型变量,这意味着它的类型将在编译时确定,因此在您的第一次使用时,它将被分配一个匿名类型,在您的第二次尝试为其分配一个不同的匿名类型,您不能这样做.
您可以修改代码以使用类而不是匿名对象,然后投射到该代码,然后您将执行您现在正在执行的操作.您可以创建类如下:
public class MyClass
{
public int Value {get;set;}
public string Sms {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后通过将select语句修改为:
var retVal = ......
select new MyClass
{
Value = groupItem.Value,
Sms = groupItem.Sms
};
Run Code Online (Sandbox Code Playgroud)