[英]convert two LINQ queries to single query
I have made two LINQ queries one for getting Id
and another for getting amount
from the same model class.我已经进行了两个 LINQ 查询,一个用于获取
Id
,另一个用于从同一个 model class 获取amount
。 Since I am new to LINQ
I don't know whether these two queries can be combined and get the same result.由于我是
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);
Both the above queries give the same row only selected fields are different.上述两个查询都给出了相同的行,只有选定的字段不同。 So is there any way I can use one single query to retrieve both the values and then how to convert
KaryakramId
to int
and NikashaAmount
to decimal
?那么有什么方法可以使用一个查询来检索这两个值,然后如何将
KaryakramId
转换为int
并将NikashaAmount
转换为decimal
?
You can use projection and assign it on anonymous type:您可以使用投影并将其分配给匿名类型:
var KID = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { karya = n.KaryakramId, nika = n.NikashaAmount }).FirstOrDefault();
Then from there you can access it via properties of your anonymous type:然后从那里您可以通过匿名类型的属性访问它:
int kid = Convert.ToInt32(KID.karya);
decimal kamt = Convert.ToDecimal(KID.nika);
The required data can be accessed with FirstOrDefault()
extension and assign to anonymous type as:可以使用
FirstOrDefault()
扩展访问所需的数据,并将其分配给匿名类型:
var result = db.Nikashas
.FirstOrDefault()(n => n.NIKASHAId == id)
.Select(n => new
{
kId = n.KaryakramId,
kAmt = n.NikashaAmount
});
From the result
, required values can be accessed from anonymous type:从
result
中,可以从匿名类型访问所需的值:
int kid = Convert.ToInt32(result.kId);
decimal kamt = Convert.ToDecimal(result.kAmt);
You could do something like this, assuming that your values are returned as strings and will be valid when converted to their types, and that the nikasha object is not too big that returning the whole thing adversely affects performance:你可以做这样的事情,假设你的值作为字符串返回并且在转换为它们的类型时有效,并且 nikasha object 不是太大,返回整个东西会对性能产生不利影响:
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;
You can use select new object with some property that you want您可以将 select new object 与您想要的一些属性一起使用
var result = db.Nikashas.Where(n => n.NIKASHAId == id).Select(n => new { n.KaryakramId, n.NikashaAmount}).FirstOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.