LINQ для SQL с двумя условиями - PullRequest
0 голосов
/ 11 декабря 2011

Я хочу написать linq to sql запрос с двумя where условиями, но во всех условиях будет select с другим выбором.(Два столбца одного типа, поэтому у меня нет проблем, чтобы получить их в этот список.)

Я хочу, чтобы это выглядело как нормальное условие:

    if (...)
          // do something - select one column
    if (...)
          // do something - select another column

Теперь я написалтаким образом: (A - параметр, переданный функции, и я проверяю, является ли A одним из столбцов - если да, выберите другой столбец)

        var q1 = from stud in _context.temps
                where stud.a == A // this is first condition A==a
                select stud.b; // here selected column b
        var q2 = from stud in _context.temps
                where stud.b == A // this is second condition A==b
                select stud.a; // here selected column a
        List<temp> answer = q1.ToList();
        answer.AddRange(q2.ToList());
        return answer;

Но это показалось слишком сложным.

Ответы [ 3 ]

3 голосов
/ 11 декабря 2011

Вы имеете в виду:

IQueryable<string> query;
if(foo) {
    query = from row in db.SomeTable
            where row.Whatever
            select row.SomeString;
} else if (bar) {
    query = from row in db.MaybeAnotherTable
            select row.AnotherString;
} ...

foreach(string s in query) ...

Редактировать на основе вашего обновления:

Если у вас есть

 IQueryable<string> query1 = ..., query2 = ...;
 IQueryable<string> result = null;

Тогда вы можете иметь несколько:

if(condition1) {
    result = result == null ? query1 : result.Concat(query1);
}
if(condition2) {
    result = result == null ? query2 : result.Concat(query2);
}
1 голос
/ 11 декабря 2011

Глядя на приведенный вами пример, кажется, что все, что вам просто нужно, это объединение.Если это так, то следующий код будет тем, что вы ищете.

var q1 = (from stud in _context.temps
        where stud.a == A
        select stud.b).Union 
            (from studb in _context.temps
            where stud.b == A
            select stud.a);

List<temp> answer = q1.ToList();
return answer;
1 голос
/ 11 декабря 2011

Вы можете использовать третичный оператор , внутри вашего предложения select. Смотрите этот код:

Dictionary<string, string> names = new Dictionary<string, string>();
names.Add("Saeed", "Neamati");
names.Add("Rasour", "Zabihi");
names.Add("Vahid", "Asefi");
names.Add("Mohsen", "Parmooz");

var query = from name in names
            select name.Key.StartsWith("V") ? name.Key : name.Value;
query.ToList().ForEach(n => {
    Console.WriteLine(n);
});
Console.ReadLine();

То, что он производит, это:

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