用Lambda表达式连接两个表

本文关键字:两个 Lambda 表达式 连接 | 更新日期: 2023-09-27 18:01:52

我是Lambda表达式的新手。我想从两个表的组合在哪里子句lambda表达式的结果,查询运行良好,但如何在处理查询后得到变量的结果??

var Rental = db.AUCDATA_COUPONS.Join(db.AUCDATA_TENORS,
                     c => c.AUCDT_ID,
                     o => o.AUCDT_ID,
                     (c, o) => new { c, o })
               .Where(x => x.o.PRODUCT_ID == "SUKUK" && x.o.ISSUE_DATE == Convert.ToDateTime("02-MAR-12") && x.o.TENOR_ID == "03Y"
                   && x.c.AUCDT_ID == x.o.AUCDT_ID && x.c.COUPON_NXTDT == Convert.ToDateTime("21-NOV-15"))
              .Select(x => x.c.RENTAL_RATE);

用Lambda表达式连接两个表

db.AUCDATA_COUPONSIQueryable<T>(其中T是表示表的类的类型)。您使用的扩展方法(如Join, WhereSelect)取此IQueryable<T>并返回新的IQueryable<T>

最后一个Select返回一个IQueryable<int>(或double,取决于RENTAL_RATE的类型)。实际的查询(lambdas)只在遍历IQueryable时执行。你可以使用foreach

foreach(var rentalRate in Rental)

也许更好的方法是将结果转换为列表或数组。这样,您将只执行一次查询,而不是一次又一次地执行每个foreach:

var list = Rental.ToList(); // results in an List<int>
// or
var array = Rental.ToArray(); // results in an int[]

注意,您可能需要将日期时间比较更改为

x.o.ISSUE_DATE.Date == new DateTime(2012,3,2)

x.c.COUPON_NXTDT.Date == new DateTime(2015,11,21)

在变量中已经有了结果。但是,根据你想用它们做什么,你可以在.Select(...)之后添加.ToArray().ToList()