我在这个linq表达式中有这个错误:
var naleznosci = (from nalTmp in db.Naleznosci where nalTmp.idDziecko == idDziec select new Payments ( nalTmp.Dziecko.Imie, nalTmp.Dziecko.Nazwisko, nalTmp.Miesiace.Nazwa, nalTmp.Kwota, nalTmp.RodzajeOplat.NazwaRodzajuOplaty, nalTmp.RodzajeOplat.TypyOplat.NazwaTypuOplaty, nalTmp.DataRozliczenia, nalTmp.TerminPlatnosci )).ToList();
任何想法如何解决这个问题?我尝试任何表达式的组合......:/
没有关于"付款"的更多信息,这没有多大帮助,但假设您要创建Payments对象并根据列值设置其某些属性:
var naleznosci = (from nalTmp in db.Naleznosci where nalTmp.idDziecko == idDziec select new Payments { Imie = nalTmp.Dziecko.Imie, Nazwisko = nalTmp.Dziecko.Nazwisko, Nazwa= nalTmp.Miesiace.Nazwa, Kwota = nalTmp.Kwota, NazwaRodzajuOplaty = nalTmp.RodzajeOplat.NazwaRodzajuOplaty, NazwaTypuOplaty = nalTmp.RodzajeOplat.TypyOplat.NazwaTypuOplaty, DataRozliczenia = nalTmp.DataRozliczenia, TerminPlatnosci = nalTmp.TerminPlatnosci, }).ToList();
如果您仍想使用构造函数进行初始化而不是属性(有时需要此行为用于初始化),请通过调用ToList()
或枚举查询ToArray()
,然后使用Select(…)
.因此,它将使用LINQ to Collections,并且无法使用参数调用构造函数的限制Select(…)
将消失.
所以你的代码应该是这样的:
var naleznosci = db.Naleznosci .Where(nalTmp => nalTmp.idDziecko == idDziec) .ToList() // Here comes transfer to LINQ to Collections. .Select(nalImp => new Payments ( nalTmp.Dziecko.Imie, nalTmp.Dziecko.Nazwisko, nalTmp.Miesiace.Nazwa, nalTmp.Kwota, nalTmp.RodzajeOplat.NazwaRodzajuOplaty, nalTmp.RodzajeOplat.TypyOplat.NazwaTypuOplaty, nalTmp.DataRozliczenia, nalTmp.TerminPlatnosci )) .ToList();
刚刚遇到这个错误,我想我会补充一点,如果Payment
类型是a struct
,你也会遇到同样的错误,因为struct
类型不支持无参数构造函数.
在那种情况下,转换Payment
为类并使用对象初始化程序语法将解决该问题.
如果您像我一样,并且不希望为您正在构建的每个查询填充属性,则还有另一种方法可以解决此问题.
var query = from orderDetail in context.OrderDetails join order in context.Orders on order.OrderId equals orderDetail.orderId select new { order, orderDetail };
此时,您有一个包含匿名对象的IQueryable.如果要使用构造函数填充自定义对象,可以执行以下操作:
return query.ToList().Select(r => new OrderDetails(r.order, r.orderDetail));
现在,您的自定义对象(将两个对象作为参数)可以根据需要填充您的属性.
首先,我会避免解决方案
from .... select new Payments { Imie = nalTmp.Dziecko.Imie, .... }
这需要一个空的构造函数并忽略封装,因此您说新的Payments()是没有任何数据的有效付款,而是该对象必须至少具有一个值,可能还有其他必需的字段,具体取决于您的域.
最好有一个必需字段的构造函数,但只带来所需的数据:
from .... select new { Imie = nalTmp.Dziecko.Imie, Nazwisko = nalTmp.Dziecko.Nazwisko .... } .ToList() // Here comes transfer to LINQ to Collections. .Select(nalImp => new Payments ( nalTmp.Imie,//assume this is a required field ........... ) { Nazwisko = nalTmp.Nazwisko //optional field }) .ToList();