我对LINQ相当新手,无法理解一些不一致的行为。非常感谢任何有知识的输入。我在SO和其他地方看到了类似的问题,但它们似乎没有帮助。
我有一个非常简单的设置-一个公司表和一个地址表。 每个公司可以拥有0个或多个地址,并且如果有> 0,则必须指定一个主地址。 我正在尝试处理没有地址的情况,使用外连接并相应地更改选择语句。
请注意,我目前将输出直接绑定到GridView,因此我希望在查询中保留所有处理。
以下可行
IQueryable query =
from comp in context.Companies
join addr in context.Addresses on comp.CompanyID equals addr.CompanyID into outer // outer join companies to addresses table to include companies with no address
from addr in outer.DefaultIfEmpty()
where (addr.IsMain == null ? true : addr.IsMain) == true // if a company has no address ensure it is not ruled out by the IsMain condition - default to true if null
select new {
comp.CompanyID,
comp.Name,
AddressID = (addr.AddressID == null ? -1 : addr.AddressID), // use -1 to represent a company that has no addresses
MainAddress = String.Format("{0}, {1}, {2} {3} ({4})", addr.Address1, addr.City, addr.Region, addr.PostalCode, addr.Country)
};
但是这会在GridView中显示一个空地址,即 ", , ()
"
因此,我更新了MainAddress字段为
MainAddress = (addr.AddressID == null ? "" : String.Format("{0}, {1}, {2} {3} ({4})", addr.Address1, addr.City, addr.Region, addr.PostalCode, addr.Country))
现在我遇到了“无法翻译表达式”的错误,并且有很多自动生成的代码,对我来说意义不大。
我为MainAddress添加的条件与AddressID上的工作条件没有任何区别,所以有人可以告诉我这里发生了什么吗?
非常感谢任何帮助。