问题描述
我进行了两个LINQ查询,一个用于从同一模型类中获取Id
,另一个用于获取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
?
解决方法
您可以使用投影并将其分配给匿名类型:
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);
,
您可以执行以下操作,假设您的值以字符串形式返回,并且在转换为它们的类型时将是有效的,并且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 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;
,
您可以使用具有所需属性的选择新对象
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);