如何使用select从linq查询中获取数据

时间:2016-05-13 16:46:32

标签: c# linq

我正在测试一个简单的LINQ选择查询,并希望从表中获取两个DateTime值,但我在这里做错了,需要知道我在做什么/想错了什么?

我的查询:

var test = from x in db.Projects where x.ID == 1 select x;

然后我试着继续这样的价值观:

DateTime Date = test. ????? 

在这里,我想我应该从点后的Intellisense中得到一个建议,从表StartDate列中选择值,但这不起作用。

4 个答案:

答案 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);