将两个 LINQ 查询转换为单个查询
convert two LINQ queries to single query
我创建了两个 LINQ 查询,一个用于获取 Id
,另一个用于从同一模型 class 获取 amount
。由于我是 LINQ
的新手,我不知道这两个查询是否可以合并并得到相同的结果。
var KID = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => n.KaryakramId).FirstOrDefault();
var KAMT = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => n.NikashaAmount).FirstOrDefault();
int kid = Convert.ToInt32(KID);
decimal kamt = Convert.ToDecimal(KAMT);
以上两个查询都给出了同一行,只是所选字段不同。那么有什么方法可以使用一个查询来检索这两个值,然后如何将 KaryakramId
转换为 int
以及如何将 NikashaAmount
转换为 decimal
?
你可以这样做,假设你的值作为字符串返回,并且在转换为它们的类型时有效,并且 nikasha 对象不是太大以至于返回整个对象对性能产生不利影响:
var nikasha = db.Nikashas.Where(n => n.NIKASHAId == id).FirstOrDefault();
//to handle a default null, check for null
if(nikasha != null)
{
int KID = int.Parse(nikasha.KaryakramId);
decimal KAMT = decimal.Parse(nikasha.NikashaAmount);
}
您可以使用投影并将其分配给匿名类型:
var KID = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { karya = n.KaryakramId, nika = n.NikashaAmount }).FirstOrDefault();
然后您可以通过匿名类型的属性访问它:
int kid = Convert.ToInt32(KID.karya);
decimal kamt = Convert.ToDecimal(KID.nika);
var res = db.Nikashas.Where(n => n.NIKASHAId == id)
.Select(n => new {
kid = Convert.ToInt32(n.KaryakramId),
kamt = Convert.ToDecimal(n.NikashaAmount)}).FirstOrDefault();
int kid = res.kid;
decimal kamt = res.kamt;
您可以将 select 新对象与您想要的 属性 一起使用
var result = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { n.KaryakramId, n.NikashaAmount}).FirstOrDefault();
可以使用 FirstOrDefault()
扩展名访问所需数据并分配给匿名类型:
var result = db.Nikashas
.FirstOrDefault()(n => n.NIKASHAId == id)
.Select(n => new
{
kId = n.KaryakramId,
kAmt = n.NikashaAmount
});
从 result
开始,可以从匿名类型访问所需的值:
int kid = Convert.ToInt32(result.kId);
decimal kamt = Convert.ToDecimal(result.kAmt);
我创建了两个 LINQ 查询,一个用于获取 Id
,另一个用于从同一模型 class 获取 amount
。由于我是 LINQ
的新手,我不知道这两个查询是否可以合并并得到相同的结果。
var KID = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => n.KaryakramId).FirstOrDefault();
var KAMT = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => n.NikashaAmount).FirstOrDefault();
int kid = Convert.ToInt32(KID);
decimal kamt = Convert.ToDecimal(KAMT);
以上两个查询都给出了同一行,只是所选字段不同。那么有什么方法可以使用一个查询来检索这两个值,然后如何将 KaryakramId
转换为 int
以及如何将 NikashaAmount
转换为 decimal
?
你可以这样做,假设你的值作为字符串返回,并且在转换为它们的类型时有效,并且 nikasha 对象不是太大以至于返回整个对象对性能产生不利影响:
var nikasha = db.Nikashas.Where(n => n.NIKASHAId == id).FirstOrDefault();
//to handle a default null, check for null
if(nikasha != null)
{
int KID = int.Parse(nikasha.KaryakramId);
decimal KAMT = decimal.Parse(nikasha.NikashaAmount);
}
您可以使用投影并将其分配给匿名类型:
var KID = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { karya = n.KaryakramId, nika = n.NikashaAmount }).FirstOrDefault();
然后您可以通过匿名类型的属性访问它:
int kid = Convert.ToInt32(KID.karya);
decimal kamt = Convert.ToDecimal(KID.nika);
var res = db.Nikashas.Where(n => n.NIKASHAId == id)
.Select(n => new {
kid = Convert.ToInt32(n.KaryakramId),
kamt = Convert.ToDecimal(n.NikashaAmount)}).FirstOrDefault();
int kid = res.kid;
decimal kamt = res.kamt;
您可以将 select 新对象与您想要的 属性 一起使用
var result = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { n.KaryakramId, n.NikashaAmount}).FirstOrDefault();
可以使用 FirstOrDefault()
扩展名访问所需数据并分配给匿名类型:
var result = db.Nikashas
.FirstOrDefault()(n => n.NIKASHAId == id)
.Select(n => new
{
kId = n.KaryakramId,
kAmt = n.NikashaAmount
});
从 result
开始,可以从匿名类型访问所需的值:
int kid = Convert.ToInt32(result.kId);
decimal kamt = Convert.ToDecimal(result.kAmt);