我使用以下代码使用实体从我的数据库中提取数据.如果未找到记录,则会抛出以下异常"对象引用未设置为对象的实例."我可以捕获此信息以阻止它导致问题,但宁愿修改代码以避免出现问题.我可以更改Linq查询以使其更宽容吗?
using (var ctx = new MyEntities())
{
var users = ctx.NotificationMessages.Include("NotificationUsers")
.Where(x => x.Priority == priority)
.FirstOrDefault().NotificationUsers
.ToList();
}
Run Code Online (Sandbox Code Playgroud) 我可以发誓这是前几天的工作:
var resultSet =
(from o in _entities.Table1
where o.Table2.Table3.SomeColumn == SomeProperty
select o
).First();
SelectedItem = resultSet.Table2.SomeOtherColumn;
Run Code Online (Sandbox Code Playgroud)
我在最后一行得到一个空引用异常:resultSet.Table2为null.
我不仅确定所有的外键和诸如具有正确值的东西,而且我不知道Table2如何可以为null,因为o.Table2.Table3.SomeColumn == SomeProperty.
resultSet具有所有正确的值,但Table2为null.
[编辑] 这有效:
SelectedItem = _entities.Table2.First(
o => o.Table2.SomeColumn == SomeProperty).SomeOtherColumn;
Run Code Online (Sandbox Code Playgroud)
并且,在上面,resultSet具有所有正确的值,因此它不是数据库中的数据的问题; LINQ到实体只是做错了.
我已经开始在.NET 3.5中使用Linq-to-entities,而且我遇到了一个我可以在SQL中轻松实现的场景,但我对linq有很大的困难.我在SQL数据库中有一个包含三个字段的表,为了这个例子的目的,我将它们称为foo,bar和foo_index,并像这样填充它们:
大段引用
foo | 吧| foo_index
555 101 1
555 101 2
555 101 3
555 101 4
555 101 5
要得到最大foo_index处的条形,其中foo = 555,SQL就是
SELECT bar, max(foo_index) as max_foo_index
FROM T
WHERE foo=555
GROUP BY bar
Run Code Online (Sandbox Code Playgroud)
我已经在C#中编写了一些linq-to-entities代码,但是我觉得有一个更加优雅的解决方案,而且我缺少一些可以使下面的内容更容易的概念.另外,有没有其他方法可以从var中获取数据?
db_entity db = new db_entity();
var q =
from table in db.T
where table.FOO == 555
select new { table.BAR, table.FOO_INDEX };
var q2 =
from t2 in q
where t2.FOO_INDEX == table.Max(r => r.FOO_INDEX)
select new { t2.BAR };
int result …Run Code Online (Sandbox Code Playgroud) 做这个的最好方式是什么?通常,当我在SQL中创建一个Query时,我会在visual studio的设计器中创建它,并且我多次运行它以查看我的结果....
Linq-to-Entities有这样的事吗?
我有一长串的包括:
.Include("x")
.Include("y")
.Include("z")
.Include("z.w")
.Include("z.v")
Run Code Online (Sandbox Code Playgroud)
我想在三个不同的查询中使用此列表.如何将这些列入列表并在我的所有查询中使用该列表,以免重复自己.
我正在尝试使用EF版本4中的Dynamic where子句创建一个查询,并且唯一生成的where子句是初始语句中的"c.clientid == Clientid".查看SQL事件探查器时,result.where语句未附加到结果变量.你能告诉我我做错了什么吗?
var result = (from c in cxt.Customer
where c.clientid == Clientid
select c);
string employeenumber = formdata["employeenumber"].ToString();
if (!string.IsNullOrWhiteSpace(employeenumber))
{
result.Where(t => t.EmployeeNumber.ToLower() == employeenumber);
}
string FirstName = formdata["FirstName"].ToString();
if (!string.IsNullOrWhiteSpace(FirstName))
{
result.Where(t => t.FirstName.ToLower().Contains(FirstName));
}
return result.ToList();
Run Code Online (Sandbox Code Playgroud) 我不确定我是否正确地走这条路.我有一个Silverlight应用程序,并使用实体框架的很多.我有两个实体映射到我的数据库:标题和详细信息.我想提交一个左外联接来获取所有标题和详细信息 - 即使标题记录没有详细记录.这是我想从客户端运行的Linq查询:
var query =
from head in storeContext.Headers
join detail in storeContext.Details
on head.HeadId equals details.HeadId
into group
select new
{
Desc = head.Description,
MyCount = group.Count()
};
Run Code Online (Sandbox Code Playgroud)
由于这是Silverlight,我需要构建我的查询,然后使用storeContext.Load<T>()我的域服务(客户端上下文)中的方法将其提交给服务器.因为这个方法期待一个类型,我不知道如何构建调用以返回匿名类型,因为我在上面?
我做错了吗?我应该在这样的事情上使用Invoke方法吗?如果是这样,我如何定义我想要返回的类型?
是否有人可以指出我正确的方向,我真的会批评它.
谢谢......斯科特
c# silverlight linq-to-entities entity-framework anonymous-types
我试图将小数转换为我过去曾做过的字符串,但由于某种原因,它决定现在不起作用.我真的无法理解它,我已经在SQL Management Studio中将它设置为十进制并使用linq来传递它但是由于一些奇怪的原因,人类不知道它想要一个日期时间.
码:
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
tblTest t = new tblTest();
t.tDecimal = Convert.ToDecimal(tbxDecimal.ToString());
t.Add(t);
}
catch (Exception ex)
{
System.Diagnostics.Debug.Write(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
我想创建一个看起来像的XML
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122354" AgencyNumber="017"></Record>
<Record InfNumber="122355" AgencyNumber="018"></Record>
<Record InfNumber="122356" AgencyNumber="018"></Record>
</Records>
XElement responseXML = new XElement("Records");
responseXML.SetAttributeValue(BusinessConstants.colFileUniqueID, _fileUniqueId);
responseXML.SetAttributeValue(BusinessConstants.colSourceName, _sourceName);
foreach (InfringementEntity ie in iLES.infringementEntities)
{
responseXML.Add(new XElement("Record"));
XElement record = responseXML.Element("Record");
record.SetAttributeValue(BusinessConstants.colInfringementNumber, ie.infringementNumber);
record.SetAttributeValue(BusinessConstants.colIssueAgency, ie.issueAgency);
}
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码生成XML,但问题是当我为Record设置属性时,它会每次覆盖1st记录的属性.
所以我得到的XML是:
<Records FileUniqueId="1234567" Source="CCC">
<Record InfNumber="122356" AgencyNumber="018"></Record>
<Record/>
<Record/>
</Records>
Run Code Online (Sandbox Code Playgroud)
请帮忙.
关于C#vs2008.my贝娄查询的工作向我显示错误.可以告诉我什么是问题以及如何解决这个问题.谢谢提前.
NorthwindDataContext db = new NorthwindDataContext();
List<Order> r = (from p in db.Orders
select new { p.OrderID, p.OrderDate });
Run Code Online (Sandbox Code Playgroud)
错误信息:
无法将类型'System.Linq.IQueryable'隐式转换为'System.Collections.Generic.List'.存在显式转换(您是否错过了演员?)
linq-to-entities ×10
c# ×5
linq ×4
.net ×3
.net-3.5 ×1
decimal ×1
null ×1
silverlight ×1
xml ×1