相关疑难解决方法(0)

FirstOrDefault(),SingleOrDefault(),Any()等......哪一个是最快的?

在关于上述和/或包括其他的方法,如果你正在寻找一个记录,且只有一个记录存在,其中之一将执行的最快?例如,我要确保,一旦发现被查询的价值,我正在寻找一个将返回它的时候了,而无需通过剩余的记录搜索.

.net linq

4
推荐指数
1
解决办法
6723
查看次数

SingleOrDefault 异常处理

我有一个示例代码,它调用 SingleOrDefault 方法 3 次,并在任何序列具有多个匹配元素时记录异常。

如果我想检查此代码的哪一部分引发异常,问题就开始了。

是否可以从此异常中获取一些有用的信息,例如谓词参数或集合类型以进行更详细的跟踪?

像这样 -序列包含多个匹配元素。集合 IEnumrable|ParamType| param {谓词参数 toString()}

 public void GetSingleOrDefaultTest(){

    try{

        var user = Users.SingleOrDefault(e => e.Id == 1);

        var profile = UserProfiles.SingleOrDefault(e => e.Id == 1);

        var profile2 = UserProfiles.SingleOrDefault(e => e.Id == 2);


    } catch(InvalidOperationException ex){
        Log(ex);
    }

}
Run Code Online (Sandbox Code Playgroud)

.net c# linq

3
推荐指数
1
解决办法
8711
查看次数

如果我想在我的数据库中找到确切的搜索结果,我该用什么代替"FirstOrDefault()"?

我目前在我的控制器中使用以下代码:

Instructor instructor = db.Instructors.FirstOrDefault(
    o => o.UserName == User.Identity.Name);
Run Code Online (Sandbox Code Playgroud)

用户名选择某人.我的理解是,如果我的用户具有相似的用户名,我将无法使用"FirstOrDefault()"(当我有名为"MrUserOne"的用户搜索"MrUser"时,"MrUserTwo"和"MrUser"可能会产生"MrUserOne",因为这是"第一个"出现的搜索结果),如果我对"FirstOrDefault"未来遇到的困难的理解是正确的,我应该在它的位置使用什么?

或者我对FirstOrDefault如何运作的理解错了?

c# asp.net-mvc entity-framework asp.net-mvc-3

2
推荐指数
2
解决办法
1079
查看次数

在.Where()中使用.SingleOrDefault()将引发以下异常: - 用户代码未处理System.NotSupportedException

我正在使用asp.net mvc-4 Web应用程序,我正在使用Entity Framework 5.现在我有以下模型方法: -

 public IQueryable<TMSStorageDevice> CustomerSD(int customerid)
        {


            var customerSiteIds = entities.SiteDefinitions.Where(a => a.AccountDefinitions1.SingleOrDefault().ORG_ID == customerid).Select(a2 => a2.SITEID).ToList();
        }
Run Code Online (Sandbox Code Playgroud)

现在这会引发以下错误: -

System.NotSupportedException was unhandled by user code
  HResult=-2146233067
  Message=The methods 'Single' and 'SingleOrDefault' can only be used as a final query operation. Consider using the method 'FirstOrDefault' in this instance instead.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SingleTranslatorBase.TranslateUnary(ExpressionConverter parent, DbExpression operand, MethodCallExpression call)
       at System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       at System.Data.Objects.ELinq.ExpressionConver
Run Code Online (Sandbox Code Playgroud)

我能够通过替换(SingleOrDefault())解决这个问题: -

a.AccountDefinitions1.SingleOrDefault().ORG_ID
Run Code Online (Sandbox Code Playgroud)

with(FirstOrDefault()): -

a.AccountDefinitions1.FirsteOrDefault().ORG_ID …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc entity-framework entity-framework-5

2
推荐指数
1
解决办法
907
查看次数

Linq查询在空时不返回null

我正在使用.NetCore 1.1.2.当我为GET动作使用生成的动作时,它应该在DB上没有找到任何内容时返回null,但是Null验证不起作用.

我尝试使用Single()而不是SingleOrDefault使用try catch来抛出异常,但它似乎不是一个优雅的解决方案.

也许这是.net版本?

public IActionResult Success(string token)
{
    var paymentMade = _context.Payments
            .SingleOrDefaultAsync(m => m.StripeToken == token);

    if (paymentMade == null)
    {
        return NotFound(); //this never gets fired when empty
    }

    return View();
}
Run Code Online (Sandbox Code Playgroud)

.net c# linq asp.net-core

2
推荐指数
1
解决办法
773
查看次数

找到x项后中止linq查询?

如果我知道集合中只有一个匹配的项目,是否有任何方法可以告诉Linq这样,以便在找到它时中止搜索?

我假设这两个在返回一个项目之前搜索完整的集合?

var fred = _people.Where((p) => p.Name == "Fred").First();
var bill = _people.Where((p) => p.Name == "Bill").Take(1);
Run Code Online (Sandbox Code Playgroud)

编辑:人们似乎注意到FirstOrDefault,或SingleOrDefault.这些与我的问题无关.如果集合为空,它们只是提供默认值.正如我所说,我知道我的收藏品有一个匹配的项目.

AakashM的评论对我来说最感兴趣.我觉得我的假设是错的,但我很感兴趣.例如,当linq to objects在我的示例代码中运行Where()函数时,它如何知道对其返回值有进一步的操作?

c# linq take

1
推荐指数
1
解决办法
574
查看次数

从列表列中选择值,其中名称匹配

我有不同的列的列表,NameBitrate.

public class VideoQuality
{
    public string Name { get; set; }
    public string Bitrate { get; set; }
}

public List<VideoQuality> quality = new List<VideoQuality>()
{
     new VideoQuality() { Name = "High",   Bitrate = "5000K" },
     new VideoQuality() { Name = "Medium", Bitrate = "2500K" },
     new VideoQuality() { Name = "Low",    Bitrate = "500K" },
};
Run Code Online (Sandbox Code Playgroud)

如何从在列表中选择BitrateHigh

就像是:

if (selectedQuality == "High")
{
    // Select High Bitrate from List
    string …
Run Code Online (Sandbox Code Playgroud)

c# linq list

1
推荐指数
1
解决办法
66
查看次数

如何将这些linq查询合并为一个?

作为LINQ的新手,我创建了几个查询,并希望将它们组合成一个,但我不知道该怎么做.他们来了:

var u = dc.Users.Where(w => w.UserName == userName).SingleOrDefault();

var m = dc.Memberships.Where(w => w.UserId == u.UserId).SingleOrDefault();

m.PasswordQuestion = securityQuestion;
m.PasswordAnswer = securityAnswer;

dc.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

dc.Usersaspnet_Users
dc.Membershipaspnet_Membership

另外,SingleOrDefault和之间有什么区别FirstOrDefault

c# linq linq-to-sql

0
推荐指数
1
解决办法
394
查看次数