c# - 将 var 初始化为空

标签 c# linq linq-to-sql c#-4.0

我有一个以 var LinqQuery 开头的 LINQ 查询。但我想将 LinqQuery 放在 if 语句中,以便它处理某些属性是否为空。我需要在 if 语句之外设置 var LinqQuery,因为我有循环遍历 LinqQuery 的代码。它是否在 if 语句之外初始化了 var LinqQuery。像 var LinqQuery = string.Empty 这样的东西?

var lQuery = (from a in gServiceContext.CreateQuery("account")
    where (a["name"].Equals(lLead.AccountName) &&
        a["address1_postalcode"].Equals(lLead.ZipCode) &&
        a["address1_stateorprovince"].Equals(lLead.State)) ||
        (a["address1_line1"].Equals(lLead.Address1) &&
        a["address1_postalcode"].Equals(lLead.ZipCode) &&
        a["address1_city"].Equals(lLead.City))
    select new
    {
        Name = !a.Contains("name") ? string.Empty : a["name"],
        City = !a.Contains("address1_city") ? string.Empty : a["address1_city"],
        State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
        Zip = !a.Contains("address1_postalcode") ? string.Empty : a["address1_postalcode"],
        AccountId = !a.Contains("accountid") ? string.Empty : a["accountid"]
    });

谢谢!

最佳答案

您需要将其初始化为与查询的最终形状兼容的类型,或者直接明确键入它。

IQueryable<Foo> theQuery; // explicitly type it 
// var theQuery = db.Foos.AsQueryable(); // alternately infer it 

if (blah)
   theQuery = db.Foos.Where(...);
else 
   theQuery = db.Foos.OrderBy(...);

theQuery = theQuery.Where(...); // keep chaining 
//etc;

请注意,类型推断一次,您不能先将其设置为string.Empty,然后再期望能够将其与Linq-to-Sql 一起使用询问。那是行不通的,就像在这种情况下使用显式类型是行不通的一样。你不会期望能够做到这一点:

string blah = "";
blah = db.Foos.Where(f => f.Bar > 20);

您也不能用 var 替换 string 并期望成功。 var 并不意味着 dynamic

关于c# - 将 var 初始化为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235333/

相关文章:

c# - 如果任何列值为空,则删除数据表行c#

c# - Linq2Sql 包含

asp.net-mvc - 如何使用 linq2sql 存储库在我的 Asp.net Mvc 中实现缓存策略?

c# - LINQ 到 SQL : Grouping and limiting a record set

c# - 如何创建可同时用于 C++ 和 C# 的 dll?

c# - 代码中的 nHibernate 3.2 数据库配置?

c# - 方法有数组参数,将数组对象传递给参数

c# - 带有 IQueryable 扩展方法的最小起订量

c# - 如何在ASP.net Core中添加js和css文件?

c# - ImageBrush 问题 Windows Phone 8.1