只需使用普通布爾運算符& &和||:
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();
這是原代碼的僅僅是直接翻譯 - 但我認爲你會想從vals.Element("CustomerID")
強制轉換爲int
,你真的不想要轉換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();
神奇再次喬恩。正如你在第二個選項中提到的那樣,我已經列出了一些值,只是使用上面的代碼來使事情變得更簡單。再一次非常感謝你! – 2010-04-14 08:55:10