我对Linq和Entity框架工作很新,我的下面的代码有问题。我收到了错误
无法将类型为“<> f__AnonymousType1`2 [System.Int64,System.String]”的对象转换为“ConsoleApplication1.Profile”类型
.
我的代码是:
static void Main(string[] args)
{
ProfileEntitiesContext obj = new ProfileEntitiesContext();
List<Profile> list = new List<Profile>();
var test = (from c in obj.Customer
join a in obj.Address
on c.ProfileId
equals a.Customer.ProfileId
select new
{
CustomerProfileId = c.CustomerProfileId,
FirstName = c.FirstName
AddressLine1 = a.Line1
}).ToList().Cast<CustomerConfidentialProfile>();
foreach(var cust in test) // Unable to cast object of type '<>f__AnonymousType1`2
//[System.Int64,System.String]' to type 'ConsoleApplication1.Profile'.
{
list.Add(cust);
}
}
public class Profile
{
int _CustomerProfileId;
string _FirstName;
string _AddressLine1;
public int CustomerProfileId
{
get { return _CustomerProfileId; }
set { _CustomerProfileId = value; }
}
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
public string AddressLine1
{
get { return _AddressLine1; }
set { _AddressLine1= value; }
}
}
任何帮助将不胜感激。
您的问题是从LINQ查询返回一个匿名类型(使用new { ... }
语法。
但是,您尝试将此对象卡入List<Profile>
。所以它抱怨你试图将这个匿名对象放入一个只接受Profile
对象的List中。
为什么不用new { ...
替换new Profile { ...
,因为您在匿名类型中使用与在Profile类型中相同的字段。
并在最后删除ToList
和Cast
。
那是因为匿名类型<>f__AnonymousType1'2 [System.Int64,System.String]
不是简介! (不是实例而不是祖先的实例)。尝试替换您的选择如下:
select new CustomerConfidentialProfile
{
CustomerProfileId = c.CustomerProfileId,
FirstName = c.FirstName,
AddressLine1 = a.Line1,
property assignments go futher
})
您不能将匿名类型强制转换为命名类型。但是你可以直接构造一个命名类型:
select new CustomerConfidentialProfile()
{
CustomerProfileId = c.CustomerProfileId,
FirstName = c.FirstName
AddressLine1 = a.Line1
}).ToList();