0

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

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

这是我的数据库表Medlemar

  • ID
  • 名字
  • 迷失
  • 邮局
4

3 回答 3

6

medlem 将是对象的集合,因此您应该可以使用 foreach 或 .first 。

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

或者

 var m1 = medlem.First();
于 2012-10-07T15:09:40.007 回答
3

在 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()如果集合为空并返回默认值,则其FirstOrDefault()行为方式与 whereFirst()将抛出异常的方式相同。FirstOrDefault()它们与Single..()方法的不同之处在于,如果集合具有多个值,它们将始终返回第一个成员。

所以基本上,FirstOrDefault()除非集合本身为空,否则永远不会抛出异常。根据IEnumerable<T>集合的内容,其他变体将在一种或多种情况下引发异常。

于 2012-10-07T15:27:08.160 回答
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);否则,源中的第一个元素。

于 2012-10-07T15:09:39.150 回答