将var初始化为空

时间:2011-11-22 23:22:19

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

我有一个以var LinqQuery开头的LINQ查询。但我想将LinqQuery放在if语句中,因此它的过程是某些属性为null或不为null。我需要在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"]
    });

谢谢!

2 个答案:

答案 0 :(得分:12)

您需要将其初始化为与查询的最终形状兼容的类型,或者只是显式键入它。

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

你也不能用string取代var并期望成功。 var并不代表dynamic

答案 1 :(得分:1)

如果你需要循环但可能没有设置它的值,请尝试将其初始化为Enumerable.Empty<T>()