我想连接两个表并将一个字段相加,所以我提出了这个问题:
IQueryable<Reference.Inventory.SearchDetailRequester> _qRequester =
from a in dbErp.EPROC_TR_ER_DETAIL
join b in dbErp.EPROC_TR_INVENTORY on
new Reference.Inventory.SearchDetailRequester { ID_REQUEST = a.ID_REQUEST , ID_KATALOG = a.ID_KATALOG}
equals
new Reference.Inventory.SearchDetailRequester { ID_REQUEST = b.ID_REQUEST, ID_KATALOG = b.ID_KATALOG }
into inv_join
from c in inv_join.DefaultIfEmpty()
where a.ID_REQUEST == ID_REQUEST && a.APROVE_BY_DS == 1 && a.APROVE_BY_GS == 1
select new Reference.Inventory.SearchDetailRequester
{
ID_KATALOG = a.ID_KATALOG,
TYPE_OF_GGS = a.TYPE_OF_GGS,
TRANSACTION_TYPE = "OUT",
DATE = c.DATE ?? "",
QTY = -1 * c.QTY ?? a.QTY,
ID_INVENTORY = c.ID_INVENTORY,
QTY_AVAILABLE = ((from d in dbErp.EPROC_TR_INVENTORY
where d.ID_KATALOG == a.ID_KATALOG
group d by new { d.ID_KATALOG } into e
select new { qty_ava = (System.Int32)e.Sum(p => p.QTY ?? 0) }).FirstOrDefault().qty_ava)
};
但是当我调试时,我收到了这条消息:
类型&#39; Reference.Inventory.SearchDetailRequester&#39;在单个LINQ to Entities查询中出现两个结构不兼容的初始化。可以在同一查询中的两个位置初始化类型,但前提是在两个位置都设置了相同的属性,并且这些属性的设置顺序相同。
有人可以提供帮助吗?
答案 0 :(得分:3)
你需要以匿名类型加入,我认为你不能像你一样选择一个类:
new { ID_REQUEST = a.ID_REQUEST , ID_KATALOG = a.ID_KATALOG}
equals
new { ID_REQUEST = b.ID_REQUEST, ID_KATALOG = b.ID_KATALOG }
例如,如果b.ID_KATALOG
在数据库中可以为空,则可以像这样解决:
new { ID_REQUEST = a.ID_REQUEST , ID_KATALOG = a.ID_KATALOG}
equals
new { ID_REQUEST = b.ID_REQUEST, ID_KATALOG = (int)b.ID_KATALOG }
假设ID_KATALOG当然是int
。
或者你也可以通过其他方式做到这一点:
new { ID_REQUEST = a.ID_REQUEST , ID_KATALOG = (int?)a.ID_KATALOG}
equals
new { ID_REQUEST = b.ID_REQUEST, ID_KATALOG = b.ID_KATALOG }