我有一个存储过程,它返回一些日期,以及与表中特定行相关的Id。
基本上,我收到了帐户组合中所有帐户的所有预定交易的列表。
存储过程返回一行,其中包含Id(用于计划的事务),以及我在proc中记录的一些日期。
如果我的查询开头于:
from p in Context.scheduled_transactions
然后这个计划就可以了。但我不想得到这样的项目,因为在proc中,我正在做很多工作来创建业务日期等。所以,我没有带回EF模型 - 我的proc只是带回ID。我正在希望做这样的事情:
var trans = (from p in Context.get_scheduled_payments_by_portfolio(portfolioId)
.Include("account")
.Include("cost_centre")
.Include("z_account_transaction_type")
.Include("z_payment_frequency_type")
.Include("transaction_sub_category")
.Include("transaction_sub_category.transaction_category")
.Include("third_party")
select p).ToList();
但是,EF不能使用'Include',因为它不知道我带回来了什么。虽然id在proc中被称为'scheduled_transaction_id' - 但EF并不知道(可以理解)。
我有没有办法告诉EF该ID是否为scheduled_transaction_model - 然后使用'Include'?
也许我只需要调用proc,它返回我的对象列表,其中包含scheduled_transaction_id,以及我在proc中计算的所有日期,然后以某种方式使用该List<>在另一个可以加入其他表的linq查询中?
编辑: 我可能会做点什么!这不会显示语法错误。只需创建一个新类型...玩这个:
var trans = (from p in Context.get_scheduled_payments_by_portfolio(portfolioId)
join st in Context.scheduled_transaction
.Include("account")
.Include("cost_centre")
.Include("z_account_transaction_type")
.Include("z_payment_frequency_type")
.Include("transaction_sub_category")
.Include("transaction_sub_category.transaction_category")
.Include("third_party")
on p.scheduled_transaction_id equals st.id
select p).ToList();
答案 0 :(得分:1)
var ids = Context.get_scheduled_payments_by_portfolio(portfolioId).ToList();
var trans = (from p in Context.scheduled_transaction
.Include("account")
.Include("cost_centre")
.Include("z_account_transaction_type")
.Include("z_payment_frequency_type")
.Include("transaction_sub_category")
.Include("transaction_sub_category.transaction_category")
.Include("third_party")
where ids.Contains(p.id)
select p).ToList();
尝试将Contains()方法转换为SQL的IN(,,)语句。
答案 1 :(得分:0)
答案是join
我正在使用的表格的proc,然后我可以使用.Include()
var trans = (from p in Context.get_scheduled_payments_by_portfolio(portfolioId)
join st in Context.scheduled_transaction
.Include("account")
.Include("cost_centre")
.Include("z_account_transaction_type")
.Include("z_payment_frequency_type")
.Include("transaction_sub_category")
.Include("transaction_sub_category.transaction_category")
.Include("third_party")
on p.scheduled_transaction_id equals st.id
select new {st, p}).ToList();
然后使用新类型,我可以通过列表进行迭代,并构建我的对象。