LINQクエリでIf Else条件を使用することはできますか?
何かのようなもの
from p in db.products
if p.price>0
select new
{
Owner=from q in db.Users
select q.Name
}
else
select new
{
Owner = from r in db.ExternalUsers
select r.Name
}
これはうまくいくかもしれない...
from p in db.products
select new
{
Owner = (p.price > 0 ?
from q in db.Users select q.Name :
from r in db.ExternalUsers select r.Name)
}
db
から、これはLINQ-to-SQL/Entity Framework /類似(LINQ-to-Objectsではない)であると想定しています。
一般に、条件付き構文(a?b:c)の方が優れていますが、そのようなさまざまなクエリで動作するかどうかはわかりません(結局、TSQLをどのように記述しますか?)。
あなたがcanすることのタイプの些細な例:
select new {p.PriceID, Type = p.Price > 0 ? "debit" : "credit" };
もっと豊かなことはできますが、条件式でtableを選択できるとは本当に思えません。もちろん、試してみてください...
上記の回答は、複雑なLinq式には適していません。あなたが必要なのは:
// set up the "main query"
var test = from p in _db.test select _db.test;
// if str1 is not null, add a where-condition
if(str1 != null)
{
test = test.Where(p => p.test == str);
}
次のように変更する必要があります。
private string getValue(float price)
{
if(price >0)
return "debit";
return "credit";
}
//Get value like this
select new {p.PriceID, Type = getValue(p.Price)};
私の例:
companyNamesFirst = this.model.CustomerDisplayList.Where(a => a.CompanyFirst != null ? a.CompanyFirst.StartsWith(typedChars.ToLower())) : false).Select(b => b.CompanyFirst).Distinct().ToList();
var result = _context.Employees
.Where(x => !x.IsDeleted)
.Where(x => x.ClientId > (clientId > 0 ? clientId - 1 : -1))
.Where(x => x.ClientId < (clientId > 0 ? clientId + 1 : 1000))
.Where(x => x.ContractorFlag == employeeFlag);
return result;
ClientId = 0の場合、すべての従業員が必要です。ただし、1〜999のclientIdには、そのIDを持つクライアントのみが必要です。私は別々のLINQステートメントが同じではないという問題を抱えていました(削除/クライアントフィルターはすべてのクエリにある必要があります)ので、これらの2行を追加することで動作します(すべて999以上のクライアントがあるまでそれは幸せです) -ファクターデー!!