linq如何从var获取值

linq如何从var获取值,linq,c#-4.0,Linq,C# 4.0,如何从以下LINQ查询中获取单个值?(我想获取seapExpireDate、seapExpireMonth和seapExpireYear的值。) 我假设您希望从具有最高(最后一个)的元素中获取seapExpireDate、seapExpireMonth和seapExpireYear。然后您可以在此日期前订购: var latest = (from d in db.CT_Decals where d.TankID == decal.TankID && d.

如何从以下LINQ查询中获取单个值?(我想获取seapExpireDate、seapExpireMonth和seapExpireYear的值。)


我假设您希望从具有最高(最后一个)的元素中获取
seapExpireDate
seapExpireMonth
seapExpireYear
。然后您可以在此日期前订购:

var latest = (from d in db.CT_Decals
             where d.TankID == decal.TankID && d.DecalStatus == "Approved"
             orderby d.DecalExpireDate descending
             select new
             {
                 d.DecalExpireDate,
                 d.DecalExpireMonth,
                 d.DecalExpireYear
              }).First();
var decalExpireDate  = latest.DecalExpireDate;
var decalExpireMonth = latest.DecalExpireMonth;
var decalExpireYear  = latest.DecalExpireYear;

做与Tim相同的假设,你也可以

var result = db.CT_Decals.OrderByDescending(d => d.DecalExpireDate).First(d => d.TankID == decal.TankID && d.DecalStatus == "Approved");

var expireDate = result.DecalExpireDate;
var expireMonth = result.DecalExpireMonth; 
var expireYear = result.DecalExpireYear;
您将在“result”变量中获得所需的“CT_贴花”类型的对象,以便访问它的任何属性

var q=from r in tab1.dictenaries
var q = from r in tab1.dictenaries
                    select new {
                        r.ENGLISH,
                        r.FRENCH
                    };

            List<SomeClass> sml = new List<SomeClass>();

            int starting = 10;
            int ending = 20;
            int cntr = 0;
           foreach( var verObj in q)
           {
               if (cntr >= starting && cntr <= ending)
               {
                   SomeClass sm1 = new SomeClass();
                   sm1.ENGLISH = verObj.ENGLISH.ToString();
                   sm1.FRENCH = verObj.FRENCH.ToString();
                   sml.Add(sm1);
               }
               else if(cntr >ending)
               {
                   break;
               }
               cntr = cntr + 1;
           }
选择新的{ r、 英语, r、 法语的 }; 列表sml=新列表(); int启动=10; 整数结束=20; int-cntr=0; foreach(q中的var verObj) { 如果(cntr>=开始和结束(&cntr) { 打破 } cntr=cntr+1; }
在Tim和Dipin的基础上,当查询没有产生任何结果时,
First()
方法会抛出一个InvalidOperationException

要么用try/catch块将其包围

try{
    var latest = (from d in db.CT_Decals
                 where d.TankID == decal.TankID && d.DecalStatus == "Approved"
                 orderby d.DecalExpireDate descending
                 select new
                 {
                     d.DecalExpireDate,
                     d.DecalExpireMonth,
                     d.DecalExpireYear
                  }).First();
    var decalExpireDate  = latest.DecalExpireDate;
    var decalExpireMonth = latest.DecalExpireMonth;
    var decalExpireYear  = latest.DecalExpireYear;
}
catch(InvalidOperationException ex){ // tell no Result!}
或者您可以使用
FirstOrDefault()
,当查询不产生匹配项时,它将返回空引用

//... Example from above

}).FirstOrDefault();

// check for null-reference
if(latest != null)
    var decalExpireDate  = latest.DecalExpireDate;
    var decalExpireMonth = latest.DecalExpireMonth;
    var decalExpireYear  = latest.DecalExpireYear;
}
第三种可能是使用
take(1)


您已经在访问
decadexpiredate
,是吗?也许我当时写错了查询。我只带回了decadeExpireDate,但我想带回所有三个值……对不起,@user,我假设
Max
将返回所有三个字段。我更新了。谢谢,正是我想要的。那么,我是否需要执行var variableName=wantedValue来获取单个值?@user1202606:您还可以编写
DateTime-deafiredate=latest.deafiredate如果这真的是一个日期时间。但因为我不确定是否使用了
var
,它是实际类型的占位符。您需要选择一个元素来访问变量,LINQ查询通常返回一个
IEnumerable
,这是一个元素序列(多个)。我取了序列的第一个元素(),该元素按日期变量降序*排列。因此,它是最后一个元素。
//... Example from above

}).FirstOrDefault();

// check for null-reference
if(latest != null)
    var decalExpireDate  = latest.DecalExpireDate;
    var decalExpireMonth = latest.DecalExpireMonth;
    var decalExpireYear  = latest.DecalExpireYear;
}
//... Example from above

}).Take(1).ToList();  // returns an empty list if no match

// check whether something was returned
if(latest.Any())
    var decalExpireDate  = latest[0].DecalExpireDate;
    var decalExpireMonth = latest[0].DecalExpireMonth;
    var decalExpireYear  = latest[0].DecalExpireYear;
}