我正在测试一个简单的LINQ选择查询,并希望从表中获取两个DateTime值,但我在这里做错了,需要知道我在做什么/想错了什么?
我的查询:
var test = from x in db.Projects where x.ID == 1 select x;
然后我试着继续这样的价值观:
DateTime Date = test. ?????
在这里,我想我应该从点后的Intellisense中得到一个建议,从表StartDate
列中选择值,但这不起作用。
答案 0 :(得分:3)
如果您需要多次匹配......
您确定有多个Project
个对象具有您的查询当前建议的1
ID吗?如果是这种情况,那么您的查询应该通过Where()
方法返回满足该约束的所有记录:
// Get your Projects that meet your criteria
var test = db.Projects.Where(p => p.ID == 1);
如果您需要从这些元素访问属性,您可以显式循环它们:
// Iterate through each match that was found
foreach(var t in test)
{
// Access your properties here
DateTime dt = t.YourDateProperty;
}
或者您可以使用Select()
语句来完成此操作,仅提取您需要的属性:
// This will return a collection of Dates mapped from each element in your collection
var testDates = db.Projects.Where(p => p.ID == 1)
.Select(x => x.YourDateProperty);
如果您只需要一场比赛......
如果您只需要匹配集合中的单个元素,则可以考虑使用First()
,Single()
或其等效的FirstOrDefault()
和SingleOrDefault()
方法,返回您可以按预期使用的单个实体:
// This will return the first Project with an ID of 1
var test = db.Project.FirstOrDefault(p => p.ID == 1);
// If it was successful
if(test != null)
{
// Then you can safely access it here
DateTime dt = test.YourDateProperty;
}
所提到的方法(正常vs OrDefault()
)之间的唯一区别是,如果找不到匹配的元素,OrDefault()
方法将返回null
,因此它们通常需要进行空检查见上文。
答案 1 :(得分:1)
test
将是IEnumerable<>
类型的枚举(IQueryable<>
,Project
等等...很多适用)。因此,例如,如果您想要第一条记录,您可以这样做:
DateTime Date = test.First().SomeDateProperty;
您的查询返回的所有数据都在test
。它可以是零记录,一条记录,许多记录等。
答案 2 :(得分:0)
这就是:
var date = test.FirstOrDefault();
DateTime? Date = date != null ? date.StartDate : null;
答案 3 :(得分:0)
在test
中,您将拥有一个与条件x.ID == 1
匹配的集合。您应该遍历该集合并获取所需的属性。
我建议你使用语法:
var result = db.Projects.FirstOrDefault(x => x.ID ==1);