从“Var”变量中获取值

时间:2012-10-07 15:06:53

标签: c# sql sql-server database select

我正试图从我的SQL Server数据库中获取一行。我不知道如何得到它我尝试了很多方法,但我没有得到任何好的解决方案。

databasEntities db = new databasEntities();
var medlem = from medlemar in db.medlemar
             where medlemar.namn == "Ali"
             select medlemar;

这是我的数据库表Medlemar

  • ID
  • NAMN
  • losen
  • epost

3 个答案:

答案 0 :(得分:5)

medlem将是一个对象的集合,所以你应该能够使用foreach或.first。

foreach(var m in medlem)
{
     var namn = m.namm;
     ...
}

 var m1 = medlem.First();

答案 1 :(得分:2)

我认为您需要使用FirstOrDefault()之类的内容:

   var medlem = from medlemar in db.medlemar
                           where medlemar.namn == "Ali"
                           select medlemar;
   string nameFromVar = medlem.FirstOrDefault();

除了FirstOrDefault()之外,您还可以使用其他选项:

  • Single会返回FirstOrDefault()之类的单个项目,但如果没有或多个项目,则会抛出异常。

  • First也会返回单个项目,但在没有项目时会抛出。

但是在FirstOrDefault()的情况下,它将返回第一个项目,或者在没有项目或更准确时返回null:

  

默认(TSource),如果source为空;否则,第一个元素   源。

答案 2 :(得分:2)

在C#中,var不是无类型的。它实际上是一种隐式输入对象的方式,而无需输入整个类型名称。

例如:

var someString = "Any String Value";

string someString = "Any String Value";

编译为完全相同的IL。

因此,在您的情况下,LINQ返回IEnumerable<T>集合,其中T是medlemar对象的类型。

由于它是一个集合,您需要像访问任何其他集合一样访问它。一种可能是使用foreach

foreach(var m in medlem)
{
    //Do Something
}

另一种可能性是调用ToList(),然后按索引访问各个成员:

var medlemList =  medlem.ToList();
var namn = medlemList[i].namn;   // where i is some specific index in the collection

或者,如果您只想获取集合中的第一个对象,根据您的使用情况,您有多种选择:

var firstMedlem = medlem.Single();
var firstMedlem = medlem.First();
var firstMedlem = medlem.SingleOrDefault();
var firstMedlem = medlem.FirstOrDefault();

上面的每一个都大致相同,但如果集合有零个或多个对象,则表现不同。

Single()将返回集合中的唯一对象。如果集合包含多个对象或零,则将引发异常。类似地,如果有多个对象,SingleOrDefault()将抛出异常,但会返回default(T)返回的值(通常为null,除非T是值类型)。

如果集合为空且First()将返回默认值,则{p> FirstOrDefault()First()的行为方式也相同FirstOrDefault()将引发异常。它们与Single..()方法的不同之处在于,如果集合具有多个值,它们将始终返回第一个成员。

基本上,除非集合本身为null,否则FirstOrDefault()将永远不会抛出异常。其他变体将在一个或多个案例中引发异常,具体取决于IEnumerable<T>集合的内容。