我有一个linq查询,有时字符串字段,产品名称可能为空,null.这是表中的新字段,如果尚未输入数据,则在运行查询时出现错误.我需要做的是检查null,如果为null,则用下拉列表中的文本值替换null/empty值.我已经尝试了几件事,但无法让它发挥作用.
public IQueryable<Product> BindProduct([Control("ddProductName")] int? ProductNameId)
{
var prod = from c in _DbContext.Products
where c.ProductNameId == ProductNameId
orderby string.IsNullOrEmpty(c.ProductName) ? ddProductName.SelectedItem.Text : c.ProductName,
c.ItemNumber
select c;
return prod;
}
Run Code Online (Sandbox Code Playgroud)
变成:
public IQueryable<Product> BindProduct([Control("ddProductName")] int? ProductNameId)
{
var prodName = ddProductName.SelectedItem.Text;
var prod = from c in _DbContext.Products
where c.ProductNameId == ProductNameId
let sortName = c.Name ?? prodName
orderby sortName, c.ItemNumber
select new { c, sortName };
return prod;
}
Run Code Online (Sandbox Code Playgroud)
更新: 我认为我不清楚.我需要做的是检查null,如果为null,则用下拉列表中的文本值替换null/empty值.
"让"关键字应该可以解决问题.
这是一个LINQPad示例:
var products = Enumerable.Range(0, 100).Select(q => new {ProductNameId = 1, ProductName = (q % 15 == 0 ? null : (q % 3 == 0 ? "Fizz" : (q % 5 == 0 ? "Buzz": q.ToString()))), ItemNumber = q});
var ddProductName_SelectedItem_Text = "FizzBuzz";
var ProductNameId = 1;
var prod = from c in products
where c.ProductNameId == ProductNameId
let sortName = c.ProductName ?? ddProductName_SelectedItem_Text
orderby sortName, c.ItemNumber
select c;
return prod; //prod.Dump(); //for linqpad debugging
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8749 次 |
最近记录: |