以下linq-to-sql表达式抛出空指针异常。
$(function () {
$('#container').highcharts('StockChart', {
xAxis: {
events: {
afterSetExtremes: function (e) {
}
}
},
rangeSelector: {
selected: 1
},
series: [{
name: 'USD to EUR',
data: usdeur
}]
});
});
我发现问题是List<string> nameList = GetNames();
db.Users.FindSync(u => nameList.Contains(u.Name))
为空。但是以下更新并没有帮助。
nameList
我从谷歌搜索中发现NPE在转换为SQL期间发生(而不是在评估期间)。有没有办法解决这个问题?
答案 0 :(得分:3)
考虑.FindSync(u => ......)
内部在另一个上下文/领域/维度中发生的事情
和Only entity types, enumeration types or primitive types are supported in this context.
您可能会认为&#34;但为什么nameList.Contains正在工作&#34;这是因为库确实支持将其转换为SQL。遗憾的是,不支持nameList本身,也不支持nameList == null。
您的解决方案应该在linq之前/之前进行空检查 也许像是
var uResult = nameList == null ? db.Users.GetAll() : db.Users.FindSync(u => nameList.Contains(u.Name))
答案 1 :(得分:1)
看来你在这里几乎没有选择。这是我通常用来解决这些问题的方法。
var list = new string[] { "One", "Two", "Three" };
var list2 = new string[] { "One", "Five" };
var db = new string[] { "One", "Two", "Four" };
var conditions = new List<Func<String, bool>>();
if (list != null)
{
conditions.Add(s => list.Contains(s));
}
if (list2 != null)
{
conditions.Add(s => list2.Contains(s));
}
var query = db.AsEnumerable(); // AsQuerable on your side.
foreach (var condition in conditions)
{
query = query.Where(condition);
}
var result = query.ToList(); // Outputs "One".