Инициализировать var, чтобы очистить - PullRequest
1 голос
/ 23 ноября 2011

У меня есть запрос LINQ, который начинается с var LinqQuery. Но я хочу поместить LinqQuery в оператор if, чтобы он обрабатывал определенные атрибуты как нулевые или нет. Мне нужно установить var LinqQuery вне оператора if, потому что у меня есть код, который проходит через LinqQuery. Это инициализация var LinqQuery вне оператора if. Что-то вроде 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"]
    });

Спасибо! * * 1004

Ответы [ 2 ]

12 голосов
/ 23 ноября 2011

Вам потребуется инициализировать его для типа, совместимого с окончательной формой запроса, или просто явно ввести его.

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 голос
/ 23 ноября 2011

Если вам нужно это в цикле, но вы не можете установить его значение, попробуйте инициализировать его как Enumerable.Empty<T>()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...