如何进行涉及var的演员表?

时间:2014-07-04 05:03:17

标签: c# asp.net

我正在尝试进行涉及var的演员表。我已经初始化了我的变量:

var updateContent = (MyType)null;

if (correctTime)
{
    var getDataFromDatabase = from d in db.Content where d.someId == id select d;

    //Here's where my I need to do some type of cast.
    updateContent = getDataFromDatabase
}

我是否可以使用正确的强制转换来在updateContent中存储getDataFromDatabase?

更新:

抱歉我的问题不清楚。根据您的所有评论,我能够完成以下任务:

    IEnumerable<MtType> updateContent = null;

                  if (correctTime==true)
                    {

                       IEnumerable<MtType> getDataFromDatabase = var getDataFromDatabase = from d in db.Content where d.someId == id select d;                           
                       updateContent = getDataFromDatabase;
                     }

我的最终目标是能够从if块内部访问返回,这就行了。再次感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您查询的结果将是IEnumerable<Content>。如果您要将查询中的结果加载到MyType,那么您需要执行以下投影:

var getDataFromDatabase = from d in db.Content where d.someId == id
  select new MyType { Prop1 = d.Prop1, Prop2 = d.Prop2 };

这会在IQueryable<MyType>

中为您提供IEnumerable<MyType>,而getDataFromDatabase会继承MyType

如果您只想从查询结果中获取第一个updateContent = getDataFromDatabase.FirstOrDefault(); ,那么您可以这样做:

{{1}}

答案 1 :(得分:1)

关键字var只是具体类型的便捷缩写。 类似于动态类型。正如之前很多评论家所说,以下两行是相同的

var myVar1 = (MyType)null;

MyType myVar2 = (MyType)null;

唯一的区别是可以在第二行中省略类型转换。所以,也提到了这一点,你试图将IEnumerable<OfSomeType>分配给MyType的变量,而这个变量根本没有,也永远不会有效。

Resharper的重构选项允许您在隐式(var)和显式(MyType)声明之间切换。

答案 2 :(得分:1)

我认为在您发布的内容的代码中,检查updateContent是否为null

这似乎是conditional operator

的一个非常好的应用
var updateContent = correctTime 
    ? (from d in db.Content where d.someId == id select d)
    : null;