그냥 일반 부울 연산자를 사용을 & & 및 || : 원래 코드의 단지 직접 번역의
XDocument db = XDocument.Load(xmlPath);
var query = (from vals in db.Descendants("Customer")
where (textbox1.Text != "" &&
vals.Element("CustomerID") == Convert.ToInt32(textbox1.Text)) ||
(textbox2.Text != "" && vals.Element("Name") == textbox2.Text)
select vals).ToList();
-하지만 난 당신이 int
에 vals.Element("CustomerID")
에서 캐스팅을 할 것입니다 생각하고, 당신이 정말로 012을 변환하고 싶지 않아 모든 반복마다이 나옵니다. 또한 "이름"XElement
을 문자열로 변환해야합니다. 어때요?
int? customerId = null;
if (textbox1.Text != "")
{
customerId = int.Parse(textbox1.Text);
}
XDocument db = XDocument.Load(xmlPath);
var query = (from vals in db.Descendants("Customer")
where (customerId != null &&
(int) vals.Element("CustomerID") == customerId) ||
(textbox2.Text != "" &&
(string) vals.Element("Name") == textbox2.Text)
select vals).ToList();
또는 두 부분의 쿼리를 분리하고 결과를 함께 "결합"할 수 있습니다. 또는 선호하는 IMO - 더 동적으로 쿼리를 작성할 수 있습니다.
var query = db.Descendants("Customer");
if (textbox1.Text != null)
{
int customerId = int.Parse(textbox1.Text);
query = query.Where(x => (int) x.Element("CustomerID") == customerId);
}
if (textbox2.Text != null)
{
query = query.Where(x => (string) x.Element("Name") == textbox2.Text);
}
List<XElement> results = query.ToList();
환상적인 다시 Jon. 이미 두 번째 옵션에서 언급했듯이 값에 대해 알아 보았습니다. 위 코드를 사용하면 더 간단하게 만들 수 있습니다. 대단히 감사합니다! –