我想实现以下方案......
表1 - 数据库1的tAccessRequest 列 - RequestId,CardNo等...... 表2 - 数据库2的tBadge 专栏 - CardNo,CardStatus等......
我创建了一个Request Class,如下所示
public class RequestDetails
{
public int RequestID { get; set; }
public int RequestTypeID { get; set; }
public string PersonID { get; set; }
public int SectionCode { get; set; }
public int RequestStateID { get; set; }
public int ApprovalStatusID { get; set; }
}
现在我正在编写两个LINQ查询
List< RequestDetails > listReq = new List< RequestDetails >();
listReq = (from PP in DB1.tAccessRequests
where (PP.RequestStateID == 1 || PP.ApprovalStatusID == 1) && PP.SectionCode != null
select new RequestDetails
{
RequestID = PP.RequestID,
SectionCode = PP.SectionCode.Value
}).ToList();
在我要实现的第二个LINQ查询中
var CardNoList = (from BC in prowatchContext.BADGE_C
where BC.STAT_COD != 'A' && BC.CARDNO in ("Select SectionCodefrom listReq"))
如何编写第二个LINQ查询..
请帮忙
答案 0 :(得分:0)
您只需将Contains
用于IN
:
var CardNoList = (from BC in prowatchContext.BADGE_C
where BC.STAT_COD != 'A' &&
listReq.Select(lr => lr.SectionCode).Contains(BC.CARDNO)
).ToList();
注意:如果listReq
很大,除非您在客户端上执行Contains
测试,否则这可能无效,在这种情况下,您可能需要使用HashSet
:
var reqCardNos = new HashSet<int>(listReq.Select(lr => lr.SectionCode));
var CardNoList = prowatchContext.BADGE_C.Where(BC => BC.STAT_COD != 'A')
.AsEnumerable()
.Where(BC => reqCardNos.Contains(BC.CARDNO))
.ToList();
AsEnumerable
会将所有匹配的行拉到客户端,然后对其进行过滤,因此如果BADGE_C
非常大,这可能也无法正常工作,在这种情况下,您可能必须推送{ {1}}到临时表中的reqCardNos
数据库,然后进行连接。
答案 1 :(得分:-1)
试试这个:
var CardNoList = from BC in prowatchContext.BADGE_C
join lr in listReq on BC.CARDNO equals lr.CardNo where BC.STAT_COD != 'A'
select BC