Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达式语法单个字段_C#_Linq_Lambda - Fatal编程技术网

C# 表达式语法单个字段

C# 表达式语法单个字段,c#,linq,lambda,C#,Linq,Lambda,我一直在从事一个项目,该项目使用第三方DAL(亚音速)为所有数据库对象生成类 对于查询这些对象,现有的代码实践通常是: int keyValue = 1; TableObject t = TableObject.SingleOrDefault(x => (x.keyField == keyValue)); if (t != null) { int valueWeWant = t.fieldWeWant; string otherValueWeWant = t.otherFi

我一直在从事一个项目,该项目使用第三方DAL(亚音速)为所有数据库对象生成类

对于查询这些对象,现有的代码实践通常是:

int keyValue = 1;
TableObject t = TableObject.SingleOrDefault(x => (x.keyField == keyValue));
if (t != null) {
    int valueWeWant = t.fieldWeWant;
    string otherValueWeWant = t.otherFieldWeWant;
}
我一直在尝试尽可能减少SQL流量,因为我们倾向于使用大行,并且通常只关注一个或两个字段。到目前为止,我能找到的最佳方法是:

int keyValue = 1;
var t = TableObject.All().Where(x => (x.keyField == keyValue)).Select(x => new { x.fieldWeWant, x.otherFieldWeWant}).Take(1);
if ((t != null) && (t.Count() != 0)) {
    int valueWeWant = t.First().fieldWeWant;
    string otherValueWeWant = t.First().otherFieldWeWant;
}
我喜欢生成的SQL只选择一行和两个字段,并且对匿名类型的可读性感到满意,但是必须比较.Count()对我来说似乎是浪费


我是否缺少一种更简单的方法来执行此操作?

您的想法是正确的,但是如果您发现自己正在使用Count()>0,则需要使用

if ((t != null) && (t.Any())) 
.Any()在集合中找到第一个实体后返回true。鉴于,.Count()在返回true之前迭代整个集合,并且如果将
Take(1)
替换为,.Count()是性能上的一个打击,则只需检查
null
,而不检查
Count()==1
,并跳过调用
First()


我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。很高兴知道,但既然我这么做了。在询问中,这个答案严格来说不是这个问题的好答案。谢谢,这太完美了(等着吧,让我接受)!
var t = TableObject
    .All()
    .Where(x => (x.keyField == keyValue))
    .Select(x => new { x.fieldWeWant, x.otherFieldWeWant})
    .SingleOrDefault();
if (t != null) {
    int valueWeWant = t.fieldWeWant;
    string otherValueWeWant = t.otherFieldWeWant;
}