我尝试使用Lambda表达式(而不是对我)进行复杂的查询。我有我想要“翻译”到Lambda的SQL。
SELECT MAX((SUBSTRING(tbp.dt,4,4)+SUBSTRING(tbp.dt,2,2)+SUBSTRING(tbp.dt,1,2))) as Dt,
tb._n, tbp.number, tbp.dsc
FROM TB_A tb
JOIN TB_B_C tbp ON tbp.number = tb.number
WHERE tbp.rec = 0 AND tbp.processing = 0 AND tb._n != '' AND tbp.error = 0
GROUP BY tb._n, tbp.number, tbp.dsc到目前为止,我有一个Lambda表达式:
var results = db.a
.Join(db.b_c, proc => proc.number, andam => andam.number, (proc, andam) => new { proc, andam })
.Where(d => d.proc._n != "" && d.andam.rec == false && d.andam.processing == false && d.andam.error)
.ToList();如何完成选择以获得与SQL查询相同的结果?如果可能的话,您能解释一下在将查询“翻译”到Lambda时如何正确地思考吗?
非常感谢。
发布于 2016-03-03 14:57:56
使用查询语法编写通常更容易
var results = from tb in db.a
join tbp in db.b_c on tb.number equals tbp.number
where tbp.rec == 0
&& tbp.processing == 0
&& tb._n != string.Empty
&& tbp.error == 0
group new {tb, tbp} by new {tb._n, tbp.number, tbp.dsc} into grp
select new
{
grp.Key._n,
grp.Key.number,
grp.Key.dsc,
Dt = grp.Max(x => x.tbp.dt.Substring(4,4)
+ x.tbp.dt.Substring(2,2)
+ x.tbp.dt.Substring(0,2))
};发布于 2016-03-07 16:29:56
你所需要做的就是
1)添加GroupBy和Select语句
或
2)将Join替换为GroupJoin。
下面的示例与数据库架构无关.
选项1)
var results = ...
.GroupBy(x=> new {x.Field1, x.Field2, x.Field3})
.Select(grp=>new
{
Key = grp.Key,
MaxVal = grp.Max(o=>o.Field1)
});选项2)
var result = db_a.Where(x=>x.Field1==1 && x.Field2==0)
.GroupJoin(db_b.Where(x=>x.Field3==5),
a => a.PrimaryKey,
b => b.ForeignKey,
(a, b) => new
{
PK=a.PrimaryKey,
MaxVal=b.Max(o=>o.Field2)
});来源:https://msdn.microsoft.com/en-us/library/bb534297%28v=vs.110%29.aspx
https://stackoverflow.com/questions/35774883
复制相似问题